我已经浏览了这里的帖子,但是还没有找到解决方案。
我正在尝试发送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发送:
但是,在使用我的代码时,即使看起来请求已正确发送,fiddler上还是以某种方式使服务器无法将它们识别为WebForms
这是服务器期望它们的方式,但是由于某些原因,这似乎不起作用
当我从浏览器中正常运行时,这是请求表单数据:
答案 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)