我有一个tor的请求,该请求以前在python3.6中起作用。我切换到python3.7,现在得到403响应状态。
以下是使用conda环境和请求复制问题的一种方法:
在python3.6中:
conda create -n python3.6 python=3.6.5
conda activate python3.6
conda install requests
conda install ipython[all]
ipython
import requests
session = requests.session()
session.proxies = {}
session.proxies['http'] = 'socks5h://localhost:9050'
session.proxies['https'] = 'socks5h://localhost:9050'
url='https://dubicars.com'
session.get(url, headers={'User-Agent': "Mozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20100101 Firefox/10.0"})
返回:<Response [200]>
在python3.7中:
conda create -n python3.7
conda activate python3.7
conda install requests
conda install ipython[all]
ipython
import requests
session = requests.session()
session.proxies = {}
session.proxies['http'] = 'socks5h://localhost:9050'
session.proxies['https'] = 'socks5h://localhost:9050'
url='https://dubicars.com'
session.get(url, headers={'User-Agent': "Mozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20100101 Firefox/10.0"})
返回:<Response [403]>
两者都应导致相同的响应(如果成功而没有超时或中断),但是我在第一个中得到200
,在第二个中得到403
。有任何解释和解决方法吗?
这也发生在其他一些网站上。
对每种环境的软件包进行比较,我只看到3个版本差异,其中之一显然是python:
cryptography 2.3.1
openssl 1.0.2t
python 3.6.5
cryptography 2.7
openssl 1.1.1d
python 3.7.4
编辑: 我将openssl降级到1.0.2t,将加密降级到与python 3.6.5相同的版本,并将python降级到3.7.0,升级python会同时使用openssl和加密。使用降级的python 3.7请求可以正常工作。
我认为问题出在openssl,所以这是预期的行为吗?我应该以其他方式设置请求吗?