python上传字符串与https发布

时间:2018-04-24 13:30:03

标签: python python-requests

我们想用python上传一个字符串。 我找到了here一些示例并创建了以下脚本。

import requests
url = 'https://URL/fileupload?FileName=file.csv'
headers = {'content-type': 'octet-stream'}
files = {'file': ('ID,Name\n1,test')}
r = requests.post(url, files=files, headers=headers, auth=('user', 'password'))

上传工作正常,但输出包含一些意外的行。

--ec7b507f800f48ab85b7b36ef40cfc44
Content-Disposition: form-data; name="file"; filename="file"

ID,Name
1,test
--ec7b507f800f48ab85b7b36ef40cfc44--

目标是仅从files = {'file': ('ID,Name\n1,test')}上传以下内容:

ID,Name
1,test

这怎么可能?

1 个答案:

答案 0 :(得分:0)

使用files参数时,requests会创建发布文件所需的标题和正文 如果您不希望您的请求格式化,则可以使用data参数。

url = 'http://httpbin.org/anything'
headers = {'content-type': 'application/octet-stream'}
files = {'file': 'ID,Name\n1,test'}
r = requests.post(url, data=files, headers=headers, auth=('user', 'password'))
print(r.request.body)
 
file=ID%2CName%0A1%2Ctest

请注意,将字典传递给data时,它会进行网址编码。如果您想在没有任何编码的情况下提交数据,可以使用字符串。

url = 'http://httpbin.org/anything'
headers = {'content-type': 'application/octet-stream'}
files = 'ID,Name\n1,test'
r = requests.post(url, data=files, headers=headers, auth=('user', 'password'))
print(r.request.body)
ID,Name
1,test