Python请求-多部分发送POST表单数据

时间:2018-11-07 18:49:51

标签: python-2.7 http python-requests

我已经浏览了这里的帖子,但是还没有找到解决方案。

我正在尝试发送POST请求,以将文件发送到服务器。 表单数据的一部分接受二进制文件,还有其他必填字段要添加到表单中。

我尝试过的最后一个解决方案是:

    my_data = {
        "repo_upload_file": ("filename.pdf", open("filename.pdf", rb), "application/pdf"),
        "sesskey": (None, sess_key),
        "repo_id": (None, repo_id),
        "author": (None, author),
        "savepath": (None, save_path),
        "title": (None, title),
        "itemid": (None, itemid),
        "ctx_id": (None, ctx_id)

    }
    response = session.post("http://mywebsite/repo.php?action=upload", files=my_data)
    print response.content # expecting a json object that stores the url to the uploaded file

当我通过浏览器尝试(此服务器具有ui)时,它可以正常工作。使用提琴手,我已经看到字段作为WebForms发送:

enter image description here

但是,在使用我的代码时,即使看起来请求已正确发送,fiddler上还是以某种方式使服务器无法将它们识别为WebForms

enter image description here

enter image description here

这是服务器期望它们的方式,但是由于某些原因,这似乎不起作用

当我从浏览器中正常运行时,这是请求表单数据:

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您要发布其他非文件数据,则应遵循其中之一

my_data = {
        "repo_upload_file": ("filename.pdf", open("filename.pdf", "rb"), "application/pdf")
        }

data = {
        "sesskey": sess_key,
        "repo_id": repo_id,
        "author": author,
        "savepath": save_path,
        "title": title,
        "itemid": itemid,
        "ctx_id": ctx_id
        }

类型1,正常发布数据

response = session.post(url, data = data , files=my_data)

类型2,发布为json

response =  session.post(url, json = data , files=my_data)