2017-08-31 6 views
0

Python 3.5とリクエストの使用2.18.4別のサービスにデータを送信する必要があり、何らかの理由で現在失敗しています。 送信は、別のサービスからデータを受信して​​クリーンアップした後、最終的にデータが検証され、ネイティブのpython dictとして設定された後に行われます。 データがハードコードされ、私が入ってくるデータ(ハードコードされたJSON文字列)を使用していないとき、これは動作します:json.dumpsを使用しているときに失敗したrequests.post

def my_post_method(self, url, data): 
    # import requests (above) 
    return requests.post(
     url, 
     data='{"keyA":"valA", "keyB":"valB" ... }', 
     headers={'Content-Type': 'application/json'}, 
    ) # status 200 

しかし、私はいくつかの理由で元のデータとそれを送信することはできません。

def my_post_method(self, url, data): 
    # import requests, json (above) 
    d = json.dumps(data) 
    return requests.post(
     url, 
     data=d, 
     headers={'Content-Type': 'application/json'}, 
    ) # status 400 

上からD:{"keyA":"valA", "keyB":"valB" ... }

私は要求JSONパラメータの代わりにデータを使用しようとしましたが、他のサービスは、明らかに他の端にデータパラメータを期待しています。 私が投稿しているサービスがjson形式の文字列で待機していることを意味しますか?

+0

私たちは他のサービスを知ることができますか?私たちが試すことができるものは何ですか? – GendoIkari

+0

ハードコードされた文字列でPOSTを再試行しましたか?あなたは同じ要求を二度したくないので、サービスが400秒を返す可能性はありますか? –

+0

@Rob Wattsに感謝しますが、私はいくつかの奇妙な理由から、受信側が受信データを検証していたときにキー値の順序を考慮しました。私は本当になぜか分からない... – camelBack

答えて

2

は、私はあなたが完全にjson.dumpsを避け、リクエストの少なくともバージョン2.4.2を使用している場合は、Pythonの辞書を受け入れるrequests.postで引数jsonを使用します。

More complicated requests

EDIT: 私はそれが現代のrequestsでポストでJSONを送信するための唯一の正しい方法だ、jsonは動作するはずです、どのような方法で問題を再現することはできません。

+0

私はcannot-それは私が(私が上に書いた)失敗する 私の要求をダウングレードする必要がありますか? (2.18.4→2.4.2) – camelBack

+0

コンテンツタイプを指定せずに 'json'で試しましたか? – GendoIkari

+0

はい、まだ失敗しています – camelBack

関連する問題