2017-08-02 11 views
-2

どのようにしてPOSTリクエストをPythonで送信できますか?リクエストはヘッダーなしのjsonとphotoとのマルチパート/混合でなければなりません。私はpythonでリクエストを使ってこのリクエストを送信しようとしますが、このパッケージはDataに説明を追加し、リクエストはjsonをいくつかの部分に分割します。 photoの正しいリクエストの構造の例それは私のコードです:リクエストはヘッダなしのjsonと写真との複数パート/混合である必要があります

photo = open("photo.jpg", "rb") 
file = { 
    "Data": photo 
} 
new_card = { 
    "AlternateId": "4558021a-4c29-5360-a511-08c59b52265c", 
    "CreatedBy": "1", 
    "Information": "test", 
    "IsActive": True, 
    "IsDeleted": False, 
    "UserGroupId": 3, 
    "PersonCardCategoryId": 3 
} 
r = requests.post("http://172.16.127.160:34015", auth=("1", "1"), data=new_card, files=file) 

更新:

コード:リクエストはと混合/マルチパートでなければなりません:

r = requests.post("http://172.16.127.160:34015", auth=("1", "1"), json=new_card, files=file) 

、WireSharkのは私にit

+0

[post-a-multipart-encoded-file](http://docs.python-requests.org/ja/master/user/quickstart/#ポストマルチパートでエンコードされたファイル) – stovfl

+0

私はこのプログラムをやったときにこのサイトを読んだ。そして、すべての例は、私のプログラムでは動作しません... – Kidav

+0

この回答をお読みください[multipartをPOSTする方法](https://stackoverflow.com/a/26300042/7414759)、最後の3セクション。 – stovfl

答えて

0

コンテンツタイプ 'multipart/mixed'でjsonとheaderなしのphotoを指定してリクエストします。この問題https://github.com/requests/requests/issues/1736

import requests 
import json 
from cStringIO import StringIO 
headers = { 
    '...': "...", 
    '...': "..."} 
json = StringIO(json.dumps(new_card)) 
file = open('C:\\temp\\D.jpg', 'rb').read() 
files = {"json": (None, json, "application/json; charset=UTF-8"), None: (None, file)} 
r = requests.post('http://127.0.0.1:34015', files=files, headers=headers) 

議論は次の事を考えてみましょう - 「はmultipart/mixed」は、ヘッダー内のコンテンツタイプに指定する必要はありません。主なものは、境界があるはずです。 ここに示すように、自分でクエリを作成することもできます。Python Requests Multipart HTTP POST

0

質問を示しjsonとヘッダーなしの写真

ご質問の例のコードは、jsonが通過する必要がどのように尊重していません:
jsonは、次の操作を実行投稿する:

more-complicated-post-requests

import json 
payload = {'some': 'data'} 
r = requests.post(url, data=json.dumps(payload), files=files) 

代わりの辞書を自分でエンコードします、 jsonパラメータ(バージョン2.4.2で追加)を使用して直接渡すこともでき、自動的にエンコードされます:

payload = {'some': 'data'} 
r = requests.post(url, json=payload, files=files) 
+0

ありがとうございましたが、Wiresharkはリクエスト本体にデータがないことを示しています( – Kidav

+0

完了。 'data = json.dumps(...) 'を変更した場合、pythonがフリーズします) – Kidav

+0

私にとっては役に立ちません – Kidav

関連する問題