2014-06-05 62 views
3

我对Python很新颖,我一直在使用他们的请求模块来替代PHP的cURL库。我的代码如下HTTPS代理不能与Python的请求模块一起工作

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. 
+0

找不到任何关于代码的怪事。错误似乎表明存在连接问题。 curl或wget是否在同一台机器上工作? –

+0

这里也是一个很好的工具来玩代理。 http://www.charlesproxy.com/ –

回答

2

HTTPS被请求 '窃听'。我不知道具体情况,但您可以在此网站上找到有关此问题的其他几个主题。另外一个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 
+0

@ Lance:还有什么好运气? – cpb2

+0

对不起,他迟到了。是的,这对我有效。谢谢。 – Lance

+0

通过https://github.com/shazow/urllib3/pull/170添加https代理支持 –

相关问题