我需要发送包含以下格式的数据的请求:
parameterss = urlencode({'various': 'credentials', ... ,
'xmlquery': '<?xml version="1.0" encoding="UTF-8"?> \
<query>...</query>'})
通常,它包含XML查询。假设我希望它发送的服务器是https://some/server
,我的代理是proxy:port_number
。我尝试通过以下方式将httplib2
与SocksiPy
一起使用:
import httplib2, socks
from urllib import urlencode
proxy = httplib2.ProxyInfo(proxy_type=socks.PROXY_TYPE_HTTP, proxy_host='proxy', proxy_port=port_number)
http = httplib2.Http(proxy_info=proxy)
response, content = http.request("https://some/server", "POST", parameters)
print response
并且它有效,但响应不是所需的。显然是因为我需要使用HTTPS代理(这是相同的)。我没有任何证书信息 - 类似的工作Perl脚本不使用它,它将代理定义为环境变量。 SocksiPy
有PROXY_TYPE_SOCKS4
和PROXY_TYPE_SOCKS5
常量但是,我不知道如何使用它们(没有定义证书会引发异常)。请指出如何做到这一点。
将httplib
用于xmlrpclib
可能是合适的吗?如何定义这些并放在一起工作?
答案 0 :(得分:0)
最后,我想出了方式并希望分享。它比预期的要简单得多:
import urllib, urllib2
parameters = urllib.urlencode({'various': 'credentials', ... ,
'xmlquery': '<?xml version="1.0" encoding="UTF-8"?> \
<query>...</query>'})
request = urllib2.Request("https://some/server", parameters)
response = urllib2.urlopen(request)
print response
我不知道为什么但是它没有在代码中定义任何代理 - 我只是通过shell中的环境变量在服务器上定义它。