2017-07-25 11 views
1

この問題は私を夢中にするようなものです。 公開WebサイトでAPIを管理するための非常に単純なPython 3スクリプトを作成しています。 私はカールではできますが、ピトンではできません。 はこれが機能しているだけでテスト複製curlコマンドpython 3 urllibリクエストAPI

のために、私の実環境でのライブラリやカールを要求いずれかを使用することはできません:

curl -d "credential_0=XXXX&credential_1=XXXXXX" -c cookiefile.txt https://XXXXXXXXXXXXXXX/LOGIN 

curl -d 'json={"devices" : ["00:1A:1E:29:73:B2","00:1A:1E:29:73:B2"]}' -b cookiefile.txt -v https://XXXXXXXXX/api-path --trace-ascii /dev/stdout 

を、我々はカールデバッグでこれを見ることができます:

はヘッダを送信し、 298バイト(0x12a)

0000:POST/API-パスHTTP/1.1

0034:ホスト:XXXXXXXXXXXXXXXX

0056:ユーザーエージェント:/ 7.47.0

006fカール:受け入れ:/

007C:クッキー:csrf_token = 751b6bd9-0290-496b-820E-XXXXXXXX。セッション 00bc:= XXXXXX-6d29-4cf9-8907-XXXXXXXXXXXX

00E3:のContent-Length:60

00f7:コンテンツタイプ:application/x-www-form-urlencodedで

0128: =>送信データ、60バイト(0x3c)

0000:json = {"devices":["00:1A:1E:29:73:B2"、 "00:1A:1E:29:73: B2 "]} ==情報:アップロード完了:60バイト中60アップロード

このi 2番目のリクエストを複製するPythonコード(問題のあるもの)

string_query={"devices" : [ "34:FC:B9:CE:14:7E","00:1A:1E:29:73:B2" ]} 
jsonbody_url=urllib.parse.urlencode(string_query) 
jsonbody_url=jsonbody_url.encode("utf-8") 

req=urllib.request.Request(url,data=jsonbody_url,headers={"Cookie" : 
cookie,"Content-Type": "application/x-www-form-urlencoded","User- 
Agent":"curl/7.47.0","charset":"UTF-8","Content- 
length":len(jsonbody_url), 
"Connection": "Keep-Alive"},method='POST') 

そして、サーバーはJsonコンテンツを完全に無視しています。 他のすべてが動作しています、同じAPIのログインと他のURLパラメータ

アイデア?

答えて

0

はこれを試してみてください:

import requests 

string_query={"devices" : [ "34:FC:B9:CE:14:7E","00:1A:1E:29:73:B2" ]} 
headers={ 
    "Cookie" : cookie, 
    "Content-Type": "application/x-www-form-urlencoded", 
    "User-Agent":"curl/7.47.0", 
    "charset":"UTF-8", 
    "Connection": "Keep-Alive" 
} 
response = requests.post(url,data=string_query,headers=headers) 
print(response.content) 
+0

こんにちは、すでに単なるサーバからの応答(私が言ったように私はそれを作業environemntを使用することはできません)が、運を取得するために要求モジュールを試してみました。サーバーはjsonの入力を無視しています。私は、サーバーAPIに問題があると思っています。ありがとう – pedrolp

+0

urllibのみ使用できますか? –

+0

APIのドキュメントまたはエンドポイントを提供できる場合は、別の解決策がある可能性があります。 –

関連する問題