cURL to Python:使用请求模块时出现连接错误

时间:2017-10-04 10:45:00

标签: python curl

我想将使用cURL命令的bash代码移动到Python 2.7脚本。

cURL工作命令是:

$ curl --data "vm_id='52e4130d-ffe0-495a-87c0-fc84200252ed'&gpu_ip='10.2.0.22'&gpu_port='8308'&mock_ip='10.254.254.254'&mock_port='8308'" http://rodvr-services:8080/rodvr-assign_gpu

我的Python脚本包含这个:

import requests
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

payload = {'vm_id': '52e4130d-ffe0-495a-87c0-fc84200252ed', 'gpu_ip': '10.2.0.22', 'gpu_port': '8308', 'mock_ip': '10.254.254.254', 'mock_port': '8308'}
r = requests.get('http://rodvr-services:8080/rodvr-assign_gpu', params=payload)

当我执行脚本时,出现以下错误:

$ python exec.py 
Traceback (most recent call last):
File "exec.py", line 9, in <module>
  r = requests.post('http://rodvr-services:8080/rodvr-assign_gpu', params=payload)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 112, in post 
  return request('post', url, data=data, json=json, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 58, in request
  return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 502, in request
  resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 612, in send
  r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 490, in send
  raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', BadStatusLine('\n',))

以防万一,我检查了使用Python 3会发生什么,这是输出:

HTTPConnectionPool(host='rodvr-services', port=8080): Max retries exceeded with url: /rodvr-assign_gpu?mock_ip=10.254.254.254&vm_id=52e4130d-ffe0-495a-87c0-fc84200252ed&gpu_ip=10.2.0.22&mock_port=8308&gpu_port=8308 (Caused by <class 'http.client.BadStatusLine'>: 

但是,使用 urllib2 库,它可以工作:

data = "vm_id='52e4130d-ffe0-495a-87c0-fc84200252ed'&gpu_ip='10.2.0.22'&gpu_port='8308'&mock_ip='10.254.254.254'&mock_port='8308'"
r = urllib2.Request(url='http://rodvr-services:8080/rodvr-assign_gpu', data=data)
f = urllib2.urlopen(r)
print f.read()

2 个答案:

答案 0 :(得分:0)

尝试r = requests.post('http://rodvr-services:8080/rodvr-assign_gpu', data=payload)

答案 1 :(得分:0)

This网站可以帮助您将curl命令转换为python代码 您可以在下面看到该网站建议的代码:

import requests

data = [
  ('vm_id', '\'52e4130d-ffe0-495a-87c0-fc84200252ed\''),
  ('gpu_ip', '\'10.2.0.22\''),
  ('gpu_port', '\'8308\''),
  ('mock_ip', '\'10.254.254.254\''),
  ('mock_port', '\'8308\''),
]

requests.post('http://rodvr-services:8080/rodvr-assign_gpu', data=data)
# it is slightly different from your code

由于笔记本电脑的个人问题,我无法测试您的代码。希望这对你有用。