繁体   English   中英

HTTPS代理不使用Python的请求模块

[英]HTTPS proxies not working with Python's requests module

我是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在请求中被“窃听”。 我不知道具体细节,但您可以在本网站上找到有关该问题的一些其他主题。 另外一个问题Github上仍然活跃在这里 我怀疑你遇到了那里提到的问题。 如果我完全错了,有人会纠正我。

核实:

$~ curl --proxy https://27.254.52.99:8080 icanhazip.com
27.254.52.99

Works,但然后在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM