私はBashでリクエストを受け取りました。それをPython 2.7に翻訳する必要があります。私はこの種の翻訳を何度もやりましたが、今はそれを動作させることができず、理由を理解できません。私が実行した場合このリクエストをBashからPythonに変換しますか?
{
"username":"[email protected]",
"password":"password",
"shortName":"a-short-name",
"visibility":"PRIVATE",
"sitePreset":"site-dashboard",
"title":"A Title",
"description":"A description."
}
:その内容は、次のいずれかのファイルfile.json、で
curl -X POST -v -u [email protected]:password --data "@file.json" -H "Content-Type:application/json" http://destination_url_a
:
すべてのまず、私は、このバッシュ要求を与えられました私のコンピュータのバッシュライン、結果は成功です。
いつものように、私はrequests
ライブラリをPythonで使って動作させようとしました。私がやったことです:ステータスコードが200
あるにもかかわらず、
import requests
from requests.auth import HTTPBasicAuth
import json
data = {
"username": "[email protected]",
"password": "password",
"shortName": "a-short-name",
"visibility": "PRIVATE",
"sitePreset": "site-dashboard",
"title": "A Title",
"description": "A description.",
}
headers = {'Content-Type': 'application/json'}
data_json = json.dumps(data)
r = requests.post(
url='http://destination_url_a',
data=data_json,
headers=headers,
auth=HTTPBasicAuth('[email protected]', 'password'),
verify=False,
)
残念ながら、r
変数に格納された応答は、エラーが、あります。
何が起こっている可能性がありますか?誰かが私のコードで問題を見つけたのか、何か考えがありますか?しかしEDIT
、これは別の例では、完全に働いている非常によく似ています。
バッシュ:
curl -v -H "Content-Type:application/json" -X POST --data "@file.json" -u [email protected]:password http://destination_url_b
私のPythonコード
import requests
from requests.auth import HTTPBasicAuth
import json
data = {
"userName": "[email protected]",
"password": "password",
"firstName": "Firstname",
"lastName": "Lastname",
"email": "[email protected]",
"disableAccount": "False",
"quota": -1,
"groups": ["a_group",],
}
headers = {'Content-Type': 'application/json'}
data_json = json.dumps(data)
r = requests.post(
url='http://destination_url_b',
data=data_json,
headers=headers,
auth=HTTPBasicAuth('[email protected]', 'password'),
verify=False,
)
他のリクエストとほぼ同じようですが、これは機能します。異なるデータが送信され、別のサブドメインに送信されます(両方が同じドメインに送信されます)。あなたが言及したUser-Agent
について話している場合、これらの変更は重要ですか?
同じように見えます。 http:// httpbinによる唯一の違いです。org/postはユーザエージェントであり、 '' Accept-Encoding ''は ''要求から '' gzip、deflate ''です。 –
本当に 'auth = HTTPBasicAuth( 'user @ domain'、 'password')'はこのデータがあなたの 'JSON'にすでに存在しているので、送る必要がありますか?また、 '' Content-Type'''を指定する必要はありません...問題を特定するのに役立つ情報が、応答からありますか? – Andersson
@AnderssonいくつかのWebサーバーでは、コンテンツタイプヘッダーが必要です.OPは 'json'ではなく' data'引数を使用しているので、ここでは自動的に指定されません。 –