python上传字符串与https发布

python upload string with https post

本问题已经有最佳答案,请猛点这里访问。

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

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

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

1
2
3
4
5
6
--ec7b507f800f48ab85b7b36ef40cfc44
Content-Disposition: form-data; name="file"; filename="file"

ID,Name
1,test
--ec7b507f800f48ab85b7b36ef40cfc44--

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

1
2
ID,Name
1,test

这怎么可能?


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

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

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

1
2
3
4
5
6
url = 'http://httpbin.org/anything'
headers = {'content-type': 'application/octet-stream'}
files = 'ID,Name
1,test'

r = requests.post(url, data=files, headers=headers, auth=('user', 'password'))
print(r.request.body)
1
2
ID,Name
1,test