マルチパート/フォームデータを使用したPOSTのPythonセットアップ境界 -- python フィールド と http フィールド と post フィールド と python-requests フィールド 関連 問題

python set-up boundary for POST using multipart/form-data with requests












0
vote

問題

日本語

リクエストを使用してファイルを送信したいが、サーバは ***** に設定された固定境界で機能します。 requests モジュールはランダムな境界を作成できます。どのように私はそれを上書きするのですか?

<事前> <コード> import requests url='http://xxx.xxx.com/uploadfile.php' fichier= {'uploadedfile':open('1103290736_2016_03_23_13_32_55.zip','rb')} headers2={'Connection':'Keep-Alive','User-Agent':'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)','Accept-Encoding':'gzip'} session= requests.Session() session.post(url,headers=headers2,files=fichier) session.close()
英語

I want to send a file using requests but the server works with a fixed boundary set at *****. I'm only able to send a file but the requests module creates a random boundary. How do I overwrite it?

import requests  url='http://xxx.xxx.com/uploadfile.php' fichier= {'uploadedfile':open('1103290736_2016_03_23_13_32_55.zip','rb')} headers2={'Connection':'Keep-Alive','User-Agent':'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)','Accept-Encoding':'gzip'} session= requests.Session() session.post(url,headers=headers2,files=fichier) session.close() 
</div
           
     
     

回答リスト

3
 
vote
vote
ベストアンサー
 

少年、それは1つの非常に壊れたサーバーです。可能であれば、代わりにサーバーを修正してください。

requests にpickのどんな境界を伝えることはできません。代わりに、 <を使用して、独自の<コード> multipart/form-data Payloadを構築できます。コード> email.mime パッケージ:

<事前> <コード> from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication related = MIMEMultipart('form-data', '*****') # second argument is the boundary. file_part = MIMEApplication( open('1103290736_2016_03_23_13_32_55.zip', 'rb').read(), # optional: set a subtype: 'zip', ) file_part.add_header('Content-disposition', 'form-data; name="uploadedfile"') related.attach(file_part) body = related.as_string().split(' ', 1)[1] headers = dict(related.items()) headers['User-Agent'] = 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)' r = session.post(url, data=body, headers=headers)

このセット Content-Type: multipart/form-data; boundary="*****" は、ヘッダーとして<コード> ***** を境界として ***** を使用しています(適切な<コード> 998887669 前後および後付け)。< / P>

 

Boy, that's one very broken server. If you can, fix the server instead.

You can't tell requests what boundary to pick. You can instead build your own multipart/form-data payload, using the email.mime package:

from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication  related = MIMEMultipart('form-data', '*****')  # second argument is the boundary. file_part = MIMEApplication(     open('1103290736_2016_03_23_13_32_55.zip', 'rb').read(),     # optional: set a subtype: 'zip', ) file_part.add_header('Content-disposition', 'form-data; name="uploadedfile"') related.attach(file_part)  body = related.as_string().split('  ', 1)[1] headers = dict(related.items()) headers['User-Agent'] = 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; S503+ Build/KOT49H)'  r = session.post(url, data=body, headers=headers) 

This sets Content-Type: multipart/form-data; boundary="*****" as the header, and the body uses ***** as the boundary (with appropriate -- pre- and postfixes).

</div
 
 
1
 
vote

簡単な代替案は、 <コード> private static Random _rand = new Random(); ... foreach (string item in clothingBrands.OrderBy(x => _rand.Next())) { Console.WriteLine($"{i}.{item}"); } 0 ;この GitHub issun thread

: <事前> <コード> private static Random _rand = new Random(); ... foreach (string item in clothingBrands.OrderBy(x => _rand.Next())) { Console.WriteLine($"{i}.{item}"); } 1

しかしこれは余分な依存関係を紹介し、<a href="https://toolbelt.readthedocs.io/en/latest/uploading-Data.html" real="nofollownoreferrow <>>大きなファイルをアップロードする。

 

A simple alternative is using requests-toolbelt; below example taken from this GitHub issue thread:

from requests_toolbelt import MultipartEncoder  fields = { # your multipart form fields }  m = MultipartEncoder(fields, boundary='my_super_custom_header') r = requests.post(url, headers={'Content-Type': m.content_type}, data=m.to_string()) 

However, this introduces an extra dependency and can be slow to upload large files.

</div
 
 
   
   
0
 
vote

これを行うには、実際にはリクエストモジュールを使用できます。

 <コード> private static Random _rand = new Random();  ...  foreach (string item in clothingBrands.OrderBy(x => _rand.Next())) {      Console.WriteLine($"{i}.{item}"); }  2  

これは私のために働いた。それ以外の場合、私はこのようなエラーが発生していました:

"errorMessage": "必須リクエストパート 'ファイル' '存在しません"

 

you can actually directly use the requests module to do this:

files = {'file': ('filename', open('filename', 'rb'), 'text/plain')} body, content_type = requests.models.RequestEncodingMixin._encode_files(files, {})  # this way you ensure having the same boundary defined in # the multipart/form-data contetn-type header # the form-data  data = body headers = {     "Content-Type": content_type } response = requests.post(     endpoint,     data=data,     headers=headers ) 

This worked for me. Otherwise I was getting an error like this:

"errorMessage":"Required request part 'file' is not present"

</div
 
 

関連する質問

1  Python Flask:CSVファイルを送受信します  ( Python flask send and receive csv file ) 
フラスコAPIを作成し、現在ローカルマシンで実行中です 1つのマシンからPythonスクリプトを実行してテキストファイルを投稿しました: <事前> <コード> import json import requests datas = {'var1' : 'v...

6  Python要求 - HTTP POSTの後に部分的な応答を受信することは可能ですか?  ( Python requests is it possible to receive a partial response after an http pos ) 
Python Requests Module ウェブサイトへ。データ管理の一環として、私はフォームを投稿して、結果のURLをチェックして成功したかどうかを確認してください。私の質問は、POSTの後、ページ全体を送信しないようにサーバーに要求することは可能で...

1  RequestScookieJar []は空です  ( Requestscookiejar is empty ) 
<事前> <コード> >>> import requests >>> r = requests.get('http://watchdisneychannel.go.com/live') >>> r.cookies <RequestsCookieJar[]> ...

1  リクエストを使用してサイトにログインできません  ( Cant log in to a site using requests ) 
このサイトの使用方法モジュールを使用していますが、<コード> ntdll.dll!RtlReportCriticalFailure() Unknown ntdll.dll!RtlpReportHeapFailure() Unknown ...

143  Asyncioでリクエストをどのように使用できますか?  ( How could i use requests in asyncio ) 
asyncio で並列HTTPリクエストタスクをしたいのですが、 python-requests は totalPackagesCell.ConvertValueToAppropriateTypeAndAssign(packages); 2 のイベントルー...

0  PythonにGetとPostのミックスを送信する方法  ( How to send mix of get and post in python ) 
要求モジュールを使用してGETとPOSTの組み合わせをURLに送信しようとしています。これを行う方法はありますか? 試したことは次のとおりです。 <事前> <コード> import requests payload = {'test': 'test'} r ...

2  リクエストライブラリーでプロキシをオフにします  ( Switch off proxy in requests library ) 
Pythonコードのいくつかの requests ライブラリを使用していますが、企業プロキシサーバーのムーマーな水域をナビゲートするヘルプが必要です。 次のコードを考慮してください。 <事前> <コード> response = requests.get(ur...

0  レコードをループする方法サーバーに単一のPOSTリクエストを送信しますか?  ( How to loop through records to send single post request to server ) 
私は、私がループするSQLテーブルを持っています。すべてのレコードは別々のJSONである必要があります。 私はこのようなものを期待しています: <事前> <コード> while there are rows in table: write the numbe...

-1  PythonのニュースAPIでニュースを検索するためのユーザー入力としてQを動的に解析する  ( Dynamically parsing the q as an user input to search news in news api in python ) 
私は特定のキーワードを検索してニュースAPIを通してニュースを与えるコードを書いたが、私はQを難しく符号化しています (記事のタイトルや体を検索するためのキーワードやフレーズ。)しかし、私はそれがユーザーのように動的になるべきです。誰かが私を助けてください。 ...

1  Ajax HTTPリクエストとスカラスペースショッピングカート  ( Ajax http request and squarespace shopping cart ) 
私はScearespaceサイトに取り組んでいます。これはサーバーサイドのスクリプトを許可しません。だから私はJavaScriptを使用することができますが、製品が支払いプロセッサに提出される前に、サードパーティ製アプリから税情報で購入を更新してから、取引回答...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有