作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Python 的新手,我一直在使用他们的请求模块来替代 PHP 的 cURL 库。我的代码如下
import requests
import json
import os
import urllib
import math
import sys
def main() :
url = 'https://api.com'
headers = {'Content-Type': 'application/json; charset=utf-8',
'User-Agent': '(iPhone; iOS 7.0.4; Scale/2.00)'}
d = {'token': "12345"}
proxies = {
"https": "https://27.254.52.99:8080",
}
post = json.dumps(d);
r = requests.post(url, data=post, headers=headers, proxies=proxies)
print r.json
if __name__ == "__main__":
main()
但是,我遇到了以下错误:
File "test.py", line 42, in test
r = requests.post(url, data=post, headers=headers, proxies=proxies)
File "/Library/Python/2.7/site-packages/requests-2.2.1-py2.7.egg/requests/api.py", line 88, in post
return request('post', url, data=data, **kwargs)
File "/Library/Python/2.7/site-packages/requests-2.2.1-py2.7.egg/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/Library/Python/2.7/site-packages/requests-2.2.1-py2.7.egg/requests/sessions.py", line 383, in request
resp = self.send(prep, **send_kwargs)
File "/Library/Python/2.7/site-packages/requests-2.2.1-py2.7.egg/requests/sessions.py", line 486, in send
r = adapter.send(request, **kwargs)
File "/Library/Python/2.7/site-packages/requests-2.2.1-py2.7.egg/requests/adapters.py", line 381, in send
raise ProxyError(e)
ProxyError: Cannot connect to proxy. Socket error: [Errno 54] Connection reset by peer.
最佳答案
2019 年 6 月编辑:此回复不再相关。问题已解决。
编辑 2:“请注意,即使对于 https 代理,代理地址的方案也是 http,这是因为客户端和代理服务器以普通 http 启动隧道(CONNECT 方法)。但是,这在 3 年前可能不是真的。” - 来自评论
HTTPS 在请求中被“窃听”。我不知 Prop 体细节,但您可以在本网站上找到与该问题相关的其他一些主题。还有一个 Github 问题仍然存在 here .我怀疑你遇到了那里提到的问题。如果我完全错了,请有人纠正我。
验证:
$~ curl --proxy https://27.254.52.99:8080 icanhazip.com
27.254.52.99
有效,但随后在 Python 中:
>>> proxies={'https': 'https://27.254.52.99:8080'}
>>> r = requests.get('http://icanhazip.com', headers={'User-Agent': 'Bla'}, proxies=proxies)
print r.content
<my ipv6 address comes up>
如您所见,出现了我的地址,这意味着代理什么也没做。
我不明白您为什么会收到堆栈跟踪信息。可能是因为您的 API 也在 HTTPS 上(?)。或者,也许您的 API 只是……宕机了。
无论如何,如果代理通过 HTTP,它确实可以在请求中工作。
>>> proxies={'http': 'http://27.254.52.99:8080'}
>>> r = requests.head('http://icanhazip.com', headers={'User-Agent': 'Bla'}, proxies=proxies)
print r.content
27.254.52.99
关于python - HTTPS 代理不适用于 Python 的请求模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058127/
我是一名优秀的程序员,十分优秀!