FlashAir SD卡可用于Firefox和curl,但不适用于Python请求

时间:2018-07-22 03:46:35

标签: python-3.x python-requests flashair

我有一个东芝FlashAir卡,它是支持wi-fi的SD卡,显然可以在嵌入式Linux上运行Web服务器。

我正在尝试根据https://www.flashair-developers.com/en/documents/api/uploadcgi/

通过标准的multipart / form-data帖子将文件上传到该文件

因此它可与Firefox / Chrome / IE一起使用,并与curl一起使用:

curl --form data=@mydatafile.gcode http://flashair.local/upload.cgi

但是,如果我使用Python请求,它将无法正常工作:

r=requests.post('http://flashair.local/upload.cgi',
    files={'files': open('mydatafile.gcode', 'rb')})

设备以“ NG”响应拒绝它,这是其标准的“我放弃”(不是很亮)

我已经仔细考虑了将请求发送到http://httpbin.org/post的结果,它们看起来并没有什么不同。我还准备了请求,并查看了正文和标题。它们与浏览器或curl几乎具有相同的标头,相同的负载和相同的请求结构。

其他情况正常:

requests.get('http://flashair.local/upload.cgi?WRITEPROTECT=ON')

requests.get('http://flashair.local/upload.cgi?UPDIR=/')

有人看到我想念的东西吗?还是可以建议一些调试技巧?

编辑:我终于知道了。事实证明,您必须显式指定文件名和MIME类型的“文本/纯文本”

r=requests.post('http://flashair.local/upload.cgi', files={'file': (file, open(file, 'rb'), 'text/plain')})

对于其他Web服务器(例如Apache),我不必这样做,但这是一个非常简单的服务器。

0 个答案:

没有答案