我正在执行使用 Python 请求库上传文件的简单任务。我搜索了Stack Overflow,似乎没有人遇到同样的问题,即服务器没有收到文件:
import requests
url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post'
files={'files': open('file.txt','rb')}
values={'upload_file' : 'file.txt' , 'DB':'photcat' , 'OUT':'csv' , 'SHORT':'short'}
r=requests.post(url,files=files,data=values)
我用我的文件名填充’upload_file’关键字的值,因为如果我把它留空,它会说
Error - You must select a file to upload!
现在我得到了
File file.txt of size bytes is uploaded successfully!
Query service results: There were 0 lines.
仅当文件为空时才会出现。所以我不知道如何成功发送我的文件。我知道该文件有效,因为如果我去这个网站并手动填写表格,它会返回一个很好的匹配对象列表,这就是我所追求的。我真的很感激所有的提示。
其他一些相关的线程(但没有回答我的问题):
- 使用 POST 从 Python 脚本发送文件
- http://docs.python-requests.org/en/latest/user/quickstart/#response-content
- 使用请求上传文件并发送额外数据
- http://docs.python-requests.org/en/latest/user/advanced/#body-content-workflow
原文由 scichris 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果
upload_file
是该文件,请使用:并且
requests
将发送一个多部分表单 POST 正文,其中upload_file
字段设置为file.txt
文件的内容。文件名将包含在特定字段的 mime 标头中:
注意
filename="file.txt"
参数。如果您需要更多控制,您可以使用
files
映射值的元组,包含 2 到 4 个元素。第一个元素是文件名,后跟内容,以及可选的内容类型标头值和可选的附加标头映射:这设置了一个替代文件名和内容类型,省略了可选的标题。
如果您的意思是从文件中获取 _整个 POST 正文_(未指定其他字段),则不要使用
files
参数,只需将文件直接发布为data
.然后,您可能还想设置一个Content-Type
标头,否则不会设置任何标头。请参阅 Python 请求 - POST 文件中的数据。