2017-10-04 4 views
0

cURLコマンドを使用するbashコードをPython 2.7スクリプトに移動したいとします。cURL to Python:リクエストモジュール使用時の接続エラー

$ 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スクリプトはこれを含んでいます:

のcURL作業コマンドがある

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() 
+0

すべてのクエリ引数には引用符が含まれているようです。それらを '' 'value' "'のように追加してみてください。 –

+0

@KlausD。 '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' "}'は同じ出力を生成します。 – siserte

+0

サーバーのログを確認できますか? –

答えて

0

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

+0

同じエラーです。 – siserte

0

Thisウェブサイトは、Pythonのコードにあなたのcurlコマンドを変換するのに役立ちます試してみてください。あなたは、以下のそのウェブサイトによって提案されたコードを確認でき
:原因私のラップトップと私の個人的な問題に

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 

を、私はあなたのコードをテストすることはできません。これがあなたのために働くことを望みます。

+0

私はこのソリューションをテストしましたが、私はまだ同じエラーがあります。 – siserte

関連する問題