私たちは、コンテンツがMultipartFormDataでなければならないサイトへのPOST要求を行うために、pythonを使用してスクリプトを作成しようとしています(python-requests a.t.m.を使用)。 我々は(サイトおよびポスト上のフォームに記入して)手動でこのPOSTリクエストを行うと、wiresharkのを使用して、これは(ショートバージョン)思い付いた:マルチパート/フォームデータでのPOSTリクエスト。コンテンツタイプが正しくない
Content-Type: multipart/form-data;
Content-Disposition: form-data; name="name"
Data (8 Bytes)
John Doe
我々はのpython-リクエスト・ライブラリを使用するようにしてください同じ結果を達成するため、これが送信されます
Content-Type: application/x-pandoplugin
Content-Disposition: form-data; name="name"; filename="name"\r\n
Media type: application/x-pandoplugin (12 Bytes)
//and then in this piece is what we posted://
John Doe
奇妙なことは、パケットの「一般的なタイプは」確かにマルチパート/フォームのデータであるが、個々の項目は(キー=「name」を送ったことで、値を= 'John Doe')はapplication/x-pandoplugin(私の推測する私のPC上のランダムなアプリケーション)の型を持っています。
これはコード使用される:
response = s.post('http://url.com', files={'name': 'John Doe'})
代わりに(のみ「全体」パケットのタイプを変更する)ヘッダー引数を使用しての個々の項目のコンテンツタイプを指定する方法はあります?
私たちが送信するコンテンツの種類を理解できないという事実のために、サーバーが正しく応答しないと思います。
リトル更新: は、私はそれは良いことだので、マルチパートコンテンツの異なる部分が、今私は、ブラウザでPOSTを行う場合は送信されたものと同じであると思います。それでも、サーバーは実際にスクリプトで送信した変更は行いません。まだ異なるのは、異なる部分の順序だけです。
たとえば、これは私のブラウザが送信するものです:
Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n
Encapsulated multipart part: (text/plain)
Content-Disposition: form-data; name="file"; filename="ex.txt"\r\n
Content-Type: text/plain\r\n\r\n
Line-based text data: text/plain
lore ipsum blabbla
Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n
Encapsulated multipart part:
Content-Disposition: form-data; name="seq"\r\n\r\n
Data (2 bytes)
Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n
Encapsulated multipart part:
Content-Disposition: form-data; name="name"\r\n\r\n
Data (2 bytes)
を、これは(のpython-要求を使用して)スクリプトを送信するものである:
Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n
Encapsulated multipart part:
Content-Disposition: form-data; name="name"\r\n\r\n
Data (2 bytes)
Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n
Encapsulated multipart part: (text/plain)
Content-Disposition: form-data; name="file"; filename="ex.txt"\r\n
Content-Type: text/plain\r\n\r\n
Line-based text data: text/plain
lore ipsum blabbla
Boundary: \r\n------WebKitFormBoundary3eXDYO1lG8Pgxjwj\r\n
Encapsulated multipart part:
Content-Disposition: form-data; name="seq"\r\n\r\n
Data (2 bytes)
サーバーがオンに数えていた可能性はあります部品の順序? Multipart upload form: Is order guaranteed?によると、明らかに?もしそうなら、リクエストライブラリを使って明示的に注文を行うことは可能ですか? そして、事態を悪化させるために:ファイルとテキスト値だけが混在しています。
したがって、注文を強制することはやや難しいようです。私は部品の順序は、元の要求と同じであることを確認するためにプラグインの要求で修正をした :EDIT2
s.post('http://www.url.com', files=files,data = form_values)
:これは私がそれを行う現在の方法です。これは問題を解決するものではないので、私の問題には直接的な解決策はないと思います。私はサイトの開発者にメールを送り、彼らが私を助けることを願っています!
私たちは、異なるマシン上で試してみました。もう一つはapplication/x-uplaypcでした。これは、ランダムなプラグインがデフォルトのcontent-typeを引き継ぐようです。私はまた、なぜこれが起こるかの手がかりがありません。 – HaS
非常に疑わしいですが、あなたはnetrcを使用していますか? –
いいえ、私は少なくとも知っているわけではありません。私はこの問題をほぼ解決したと思うので、更新された問題を見てください。あなたがリクエストのためのコラボレーションであるため、多分あなたはその答えを知っていますか?前もって感謝します! – HaS