[解決済み] pythonのリクエストでファイルをアップロードするには?
質問
Pythonのリクエストライブラリを使って、ファイルをアップロードするという簡単な作業を行っています。Stack Overflowを検索しましたが、誰も同じ問題、すなわち、ファイルがサーバーによって受信されないという問題を抱えていないようでした。
import requests
url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post'
files={'files': open('file.txt','rb')}
values={'upload_file' : 'file.txt' , 'DB':'photcat' , 'OUT':'csv' , 'SHORT':'short'}
r=requests.post(url,files=files,data=values)
upload_file'キーワードの値を私のファイル名で埋めています。空白にしておくと、次のように表示されるからです。
Error - You must select a file to upload!
そして今、私は
File file.txt of size bytes is uploaded successfully!
Query service results: There were 0 lines.
これは、ファイルが空の場合のみ出てきます。どうすればうまく送信できるのか困っています。このウェブサイトに行き、手動でフォームに入力すると、マッチしたオブジェクトの素敵なリストが返されるので、ファイルが機能することは分かっています。 私は本当にすべてのヒントを感謝します。
関連する他のスレッドもあります(ただし、私の問題には答えていません)。
- PythonスクリプトからPOSTでファイルを送信する
- http://docs.python-requests.org/en/latest/user/quickstart/#response-content
- リクエストを使用してファイルをアップロードし、余分なデータを送信する
- http://docs.python-requests.org/en/latest/user/advanced/#body-content-workflow
解決方法は?
もし
upload_file
がファイルを意味する場合は、使用します。
files = {'upload_file': open('file.txt','rb')}
values = {'DB': 'photcat', 'OUT': 'csv', 'SHORT': 'short'}
r = requests.post(url, files=files, data=values)
と
requests
は、マルチパートフォームの POST ボディに
upload_file
の内容に設定されています。
file.txt
ファイルを作成します。
ファイル名は、特定のフィールドのMIMEヘッダーに含まれることになります。
>>> import requests
>>> open('file.txt', 'wb') # create an empty demo file
<_io.BufferedWriter name='file.txt'>
>>> files = {'upload_file': open('file.txt', 'rb')}
>>> print(requests.Request('POST', 'http://example.com', files=files).prepare().body.decode('ascii'))
--c226ce13d09842658ffbd31e0563c6bd
Content-Disposition: form-data; name="upload_file"; filename="file.txt"
--c226ce13d09842658ffbd31e0563c6bd--
注意
filename="file.txt"
パラメータを使用します。
にタプルを使用することができます。
files
マッピングの値は、2つから4つの要素で構成されます。最初の要素はファイル名で、その後にコンテンツが続き、オプションでcontent-typeヘッダ値と追加のヘッダのマッピングがあります。
files = {'upload_file': ('foobar.txt', open('file.txt','rb'), 'text/x-spam')}
これは、代替のファイル名とコンテントタイプを設定し、オプションのヘッダーを省きます。
を意味するのであれば
POSTボディ全体
をファイルから取得する場合 (他のフィールドを指定しない場合) には、このメソッドは使用しないでください。
files
パラメータとして直接ファイルを投稿します。
data
. 次に
Content-Type
ヘッダも設定されます。参照
Python のリクエスト - ファイルからの POST データ
.
関連
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
python string splicing.join()とsplitting.split()の説明
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonショートビデオクローラーチュートリアル
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない