如何POST多部分/表单数据?

时间:2013-10-14 17:19:34

标签: python python-requests

我试图创建一个包含名称和值的字典:

{
'name':'value',
'name':'value',
'name':'value',
...
}

尝试从Chrome检查器生成POST行:

yield '------WebKitFormBoundary48hldbqBzWdSiBZ6'
yield 'Content-Disposition: form-data; name="__EVENTTARGET"'
yield 'ctl00$ctl00$cphContent$cphContent$lnkEnter'
yield '------WebKitFormBoundary48hldbqBzWdSiBZ6'
yield 'Content-Disposition: form-data; name="__EVENTARGUMENT"'
yield ''
...

在这种情况下,python崩溃并出现以下错误:

for k, vs in to_key_val_list(data)
ValueError: too many values to unpack

我还尝试了常规表单数据POST:

name=value&name=value&name=value...

您能告诉我如何创建多部分主体以及如何使用请求发布它吗? 没有要发送的文件,只有名称和值。

1 个答案:

答案 0 :(得分:0)

如果没有更具体的例子,很难确切知道你要做什么。

您的第一个示例可能有效,也可能取决于您实际使用它的方式。你是否将它传递给files参数?

你的第二个永远不会工作。需要为multipart/form-data设置一个特定的标头,它必须包含边界,在本例中为------WebKitFormBoundary48hldbqBzWdSiBZ6或某些字符串。接下来,您不应该将生成器传递给files参数,而是在正确设置标题后将其传递给data参数。

最后,如果您尝试执行multipart/form-data POST,那么除非您的网站非常灵活,否则网址编码的POST将无法以相同的方式运行。