Python 请求得到 403 但在移动设备上工作正常
Python requests getting 403 but on mobile device works fine
在 Python 中请求 HTML 页面时,我每次都收到 403 禁止响应。
import requests
url = 'https://shop.rewe.de/mydata/login'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
result = requests.get(url, headers=headers)
>>> result.status_code
403
当我使用 iOs 应用程序时,例如“Rest”,我只发送具有相同域的 GET,没有其他附加设置,并得到 200 OK 响应。
当我在 Python.
中 运行 时,我不知道问题出在哪里
编辑:
这显示了其余应用程序中的指标。在搜索协议时,我找到了 h2 或简单的 http/2 协议。我认为这是问题所在。邮递员和请求库不支持这个。
我更改了请求会话的密码。暂时有效。不知过了多久...
url = 'https://shop.rewe.de/mydata/login'
import ssl
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_
CIPHERS = (
'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:AES256-SHA'
)
class TlsAdapter(HTTPAdapter):
def __init__(self, ssl_options=0, **kwargs):
self.ssl_options = ssl_options
super(TlsAdapter, self).__init__(**kwargs)
def init_poolmanager(self, *pool_args, **pool_kwargs):
ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
self.poolmanager = PoolManager(*pool_args,
ssl_context=ctx,
**pool_kwargs)
session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0',
}
try:
r = session.request('GET', url, headers=headers)
print(r)
except Exception as exception:
print(exception)
在 Python 中请求 HTML 页面时,我每次都收到 403 禁止响应。
import requests
url = 'https://shop.rewe.de/mydata/login'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
result = requests.get(url, headers=headers)
>>> result.status_code
403
当我使用 iOs 应用程序时,例如“Rest”,我只发送具有相同域的 GET,没有其他附加设置,并得到 200 OK 响应。 当我在 Python.
中 运行 时,我不知道问题出在哪里编辑: 这显示了其余应用程序中的指标。在搜索协议时,我找到了 h2 或简单的 http/2 协议。我认为这是问题所在。邮递员和请求库不支持这个。
我更改了请求会话的密码。暂时有效。不知过了多久...
url = 'https://shop.rewe.de/mydata/login'
import ssl
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
from requests.packages.urllib3.util import ssl_
CIPHERS = (
'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:AES256-SHA'
)
class TlsAdapter(HTTPAdapter):
def __init__(self, ssl_options=0, **kwargs):
self.ssl_options = ssl_options
super(TlsAdapter, self).__init__(**kwargs)
def init_poolmanager(self, *pool_args, **pool_kwargs):
ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
self.poolmanager = PoolManager(*pool_args,
ssl_context=ctx,
**pool_kwargs)
session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("https://", adapter)
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:96.0) Gecko/20100101 Firefox/96.0',
}
try:
r = session.request('GET', url, headers=headers)
print(r)
except Exception as exception:
print(exception)