0

mechanize を使用して multipart/form-data の POST リクエストを作成しようとしています。実際に投稿すると、firefox live http ヘッダーから次のようになります。

http://example.com/new/example

POST /new/example HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://example.com/new/example
Cookie: tmgioct=c32MbAGn1sTuZrH8etPqVNU5; __qca=P0-495598852-1339139301054; __utma=189990958.911848588.1339139302.1339556345.1339561805.32; __utmz=189990958.1339139302.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); logged_in=1; tog_appearance_fieldset=fieldset_open; __utmc=189990958; pfu=42375294; pfp=h2YrFoaTr5LtrVys8PMmKNdyuoeA9FNLakxGzrJK; pfe=1371048319; __utmb=189990958.5.10.1339561805
Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 2947
-----------------------------41184676334
Content-Disposition: form-data; name="UPLOAD_IDENTIFIER"

0ad3af1c502c7cb59577b01720ee58ff014810c4
-----------------------------41184676334
Content-Disposition: form-data; name="post[state]"

2
-----------------------------41184676334
blahblahblahblah....

-----------------------------41184676334--

そして、ここに私のコードがあります:

browser = mechanize.Browser()

url = "http://example.com/new/example"
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0', 
    'Referer': 'http://example.com/new/example',
    'Content-Type': 'multipart/form-data; boundary=---------------------------41184676334'
}

data = "-----------------------------41184676334\rContent-Disposition: form-data; name="UPLOAD_IDENTIFIER"\r\r0ad3af1c502c7cb59577b01720ee58ff014810c4\r-----------------------------41184676334\rContent-Disposition: form-data; name="post[state]"\r\r2\r-----------------------------41184676334\rblahblahblahblah....\r\r-----------------------------41184676334--\r"

req = urllib2.Request(url, data, header)

response = browser.open(req, timeout = 30)
response.close()

なぜ機能しないのかわかりません。誰か知ってる?私を助けてください。

ところで、境界とか関係あるの?上記のコードでは乱数を使用しています。

4

3 に答える 3

1

MIME メディア タイプ RFC 2046から:

MIME「テキスト」サブタイプの標準的な形式は、常に CRLF シーケンスとして改行を表す必要があります。

コードではキャリッジ リターン ('\r') のみを使用しています。改行 ( \n) も追加する必要があります。

于 2012-06-13T09:48:04.893 に答える
0
browser.form.enctype = "application/x-www-form-urlencoded"
于 2013-05-29T07:21:22.613 に答える
0

requestsモジュールを使用してタスクを実行することになりました。それはより便利で信頼できることが判明しました。

詳細については、このページを確認してください: POST a Multipart-Encoded File

于 2016-11-28T03:43:26.390 に答える