使用mechanize python提交multipart / form-data?

时间:2012-06-13 09:39:28

标签: python post http-headers http-post mechanize

我正在尝试使用mechanize发出multipart / form-data的POST请求,这是我在实际发帖时从firefox live http header看起来的样子:

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()

我不知道为什么它不起作用。有人知道吗?请帮帮我。

顺便问一下,它与边界有关吗?我在上面的代码中使用了随机数。

3 个答案:

答案 0 :(得分:1)

来自MIME media types RFC 2046

  

任何MIME“text”子类型的规范形式必须始终代表一个      换行作为CRLF序列。

您的代码仅使用回车符('\ r');您还需要添加换行符(\n)。

答案 1 :(得分:0)

browser.form.enctype = "application/x-www-form-urlencoded"

答案 2 :(得分:0)

使用requests模块结束任务。结果证明它更方便可靠。

您可以查看此页面了解详情:POST a Multipart-Encoded File