1

我需要发送一个包含以下格式数据的请求:

parameterss = urlencode({'various': 'credentials', ... ,
'xmlquery': '<?xml version="1.0" encoding="UTF-8"?> \
         <query>...</query>'})

通常,它包含一个 XML 查询。假设我希望它发送的服务器是https://some/server并且我的代理是proxy:port_number. 我尝试通过以下方式使用httplib2with :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 脚本不使用,它将代理定义为环境变量。SocksiPyhasPROXY_TYPE_SOCKS4PROXY_TYPE_SOCKS5constants 但是,我不知道如何使用它们(不定义证书会引发异常)。请指出我如何做到这一点。

也许它适合使用httplibwith xmlrpclib?如何定义这些并放在一起工作?

4

1 回答 1

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 中的环境变量在服务器上定义了它。

于 2012-08-31T08:05:43.807 回答