Python请求未上传文件

乌斯特罗茨

我正在尝试使用Python请求重现以下curl命令:

curl -X POST -H 'Content-Type: application/gpx+xml' -H 'Accept: application/json' --data-binary @test.gpx "http://test.roadmatching.com/rest/mapmatch/?app_id=my_id&app_key=my_key" -o output.json

卷曲的请求工作正常。现在,我用Python尝试一下:

import requests

file =  {'test.gpx': open('test.gpx', 'rb')}

payload = {'app_id': 'my_id', 'app_key': 'my_key'}
headers = {'Content-Type':'application/gpx+xml', 'Accept':'application/json'}


r = requests.post("https://test.roadmatching.com/rest/mapmatch/", files=file, headers=headers, params=payload)

我得到了错误:

<Response [400]>
{u'messages': [], u'error': u'Invalid GPX format'}

我究竟做错了什么?我必须指定一个data-binary地方吗?

此处记录了该API:https//mapmatching.3scale.net/mmswag

马丁·彼得斯(Martijn Pieters)

Curl将文件上传为POST主体本身,但是您要求requests将其编码为multipart / form-data主体。不要files在这里使用,将文件对象作为data参数传递

import requests

file = open('test.gpx', 'rb')

payload = {'app_id': 'my_id', 'app_key': 'my_key'}
headers = {'Content-Type':'application/gpx+xml', 'Accept':'application/json'}

r = requests.post(
    "https://test.roadmatching.com/rest/mapmatch/",
    data=file, headers=headers, params=payload)

如果您在with声明中使用该文件,则上传后将为您关闭:

payload = {'app_id': 'my_id', 'app_key': 'my_key'}
headers = {'Content-Type':'application/gpx+xml', 'Accept':'application/json'}

with open('test.gpx', 'rb') as file:
    r = requests.post(
        "https://test.roadmatching.com/rest/mapmatch/",
        data=file, headers=headers, params=payload)

curl文档中--data-binary

(HTTP)这将完全按照指定的方式发布数据,而不会进行任何额外处理。

如果您以字母开头的数据@,其余的应该是文件名。数据以与发布类似的方式发布--data-ascii,除了保留换行符和回车符,并且永远不会进行转换。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python请求未上传文件

来自分类Dev

Codeigniter文件未上传

来自分类Dev

文件未上传

来自分类Dev

回形针文件未上传

来自分类Dev

PHP文件上传未上传

来自分类Dev

使用 HttpClient POST 请求上传文件返回 200,但文件未上传

来自分类Dev

HTML表单文件未上传

来自分类Dev

文件未上传到目录

来自分类Dev

laravel + dropzone文件未上传

来自分类Dev

python请求-文件上传

来自分类Dev

html + php上传表格未上传文件

来自分类Dev

在 Jmeter 中发布请求时,Zip 文件未上传到服务器

来自分类Dev

载波未上传文件(路轨4)

来自分类Dev

yii2中未上传文件

来自分类Dev

文件未上传Windows窗体C#

来自分类Dev

载波未上传文件(路轨4)

来自分类Dev

Rails回形针宝石文件未上传

来自分类Dev

文件未上传到烧瓶中

来自分类Dev

文件未上传到特定路径

来自分类Dev

Laravel - Dropzone 未上传所有文件

来自分类Dev

dropzone未上传,请求错误400,token_not_provided

来自分类Dev

文件未上传到文件夹中

来自分类Dev

使用python请求模块上传文件

来自分类Dev

使用Python请求模块上传文件

来自分类Dev

Python请求发布clyp.it上传文件

来自分类Dev

使用Python“请求”登录并上传文件

来自分类Dev

使用Python请求模块上传文件

来自分类Dev

使用python中的请求库上传文件

来自分类Dev

文件未上传到数据库。验证好吗?