在Python中通过代理将XML数据发布到服务器

时间:2012-08-29 13:08:30

标签: python http xml-rpc httplib httplib2

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

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

通常,它包含XML查询。假设我希望它发送的服务器是https://some/server,我的代理是proxy:port_number。我尝试通过以下方式将httplib2SocksiPy一起使用:

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脚本不使用它,它将代理定义为环境变量。 SocksiPyPROXY_TYPE_SOCKS4PROXY_TYPE_SOCKS5常量但是,我不知道如何使用它们(没有定义证书会引发异常)。请指出如何做到这一点。

httplib用于xmlrpclib可能是合适的吗?如何定义这些并放在一起工作?

1 个答案:

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