如何使用代理在python中使用PUT HTTP方法连接到REST Web服务?

时间:2012-10-19 18:58:52

标签: python rest proxy urllib2 httplib

我有'企业内部工具',其中嵌入了python 2.5.2。这意味着我无法使用任何其他版本或编程语言。 因此,HTTPLIB的代码如下:

  connection =  httplib.HTTPSConnection('IP:PORT')
  body_content = '<INPUT><Var1>DATA</Var1></INPUT>/r/n'
  headers = {Authorization':'Basic XXXXXXXXXXXX','Accept':'text/xml','Content-Length':'XX','Host':'host name','Accept-Encoding':'gzip,deflate'}
  connection.request('PUT', '/path/method',body_content, headers)
  result = connection.getresponse()

对于urllib2代码如下:

  body_content = '<INPUT><Var1>DATA</Var1></INPUT>\r\n'
  opener = urllib2.build_opener(urllib2.HTTPSHandler)
  request = urllib2.Request('https://IP:PORT/path/method', data=body_content)
  request.headers={'Content-length': 'XX', 'Host': 'host', 'Accept': 'text/xml', 'Authorization': 'Basic XXXXXXXXXXXXX', 'Accept-encoding': 'gzip,deflate'}
  request.get_method = lambda: 'PUT'
  url = opener.open(request)

它们都在默认的python 2.5.2安装中正常工作。 如果我尝试在工具中使用相同的代码,则会出现以下错误:

httplib的:

'module' object has no attribute 'ssl'

的urllib2:

urlopen error unknown url type: https

据我所知,SSL支持已被删除。顺便说一下:我可以编写自己的库并将它们放到正确的文件夹中使它们工作。 所以,问题是: 如何使用代理连接到Web服务? 我找到了以下示例: http://www.pha.com.au/kb/index.php/Python_-_Using_a_proxy_for_HTTP_requests

但它不适用于我的情况。你有什么建议可以解决这个问题吗? 看起来构建一个单独的代理模块来在python中执行HTTPS查询可以解决这个问题。那么,在这种情况下,连接程序可以是什么?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我建议使用优秀的库请求作为参考源:http://docs.python-requests.org/en/latest/user/advanced/#proxies

他们处理各种HTTP问题。