我有一个small_file.txt
文件,其中包含:
1asdfaksdjfhlaksjdhflkjashdflkjhasldkjfhlaksdfhasdf:
2asdfaksdjfhlaksjdhflkjashdflkjhasldkjfhlaksdfhasdf:
3asdfaksdjfhlaksjdhflkjashdflkjhasldkjfhlaksdfhasdf
4asdfaksdjfhlaksjdhflkjashdflkjhasldkjfhlaksdfhasdf:
注意末尾的冒号,它们只是普通的字符串。在
当我试图用python requests
发送它时,它不起作用。由于某些原因,它等待第一行带有冒号,然后发送从那里开始的所有行。例如,在上面的文件中,它将仅POST
:
我如何解决这个问题?我不知道发生了什么事。在
下面是我的代码的一个简单版本:
import requests
import sys
import json
import os
token = 'nVQowAng0c'
url = "https://api.hipchat.com/v2/room/test_room/share/file"
headers = {'Content-type': 'multipart/related; boundary=boundary123456'}
headers['Authorization'] = "Bearer " + token
filepath = 'small_file.csv'
data = open(filepath, 'rb').read()
payload = """\
--boundary123456
Content-Type: application/json; charset=UTF-8
Content-Disposition: attachment; name="metadata"
--boundary123456
Content-Disposition: attachment; name="file"; filename="{0}"
{1}
--boundary123456--\
""".format(os.path.basename(filepath), data)
r = requests.post(url, headers=headers, data=payload)
r.raise_for_status()
当我试图发送一个.csv
文件,每行都有一个时间戳时,不会发送任何内容,因为每一行都有一个冒号。在
以下是来自@Martijn Pieters的组合代码:
直接的错误是对MIME多部分元素编码错误。每个部分都有两个部分、标题和内容,中间有一个双换行符。你的第二个新行不见了,请加上:
我不会手动构建内容,而是重新使用^{} project 以允许您以流式方式上载数据:
^{pr2}$我调整了^{} class 来发出
multipart/related
数据流,而不是multipart/form-data
消息。在请注意,我传递的是open file对象,而不是文件数据本身;这是因为
MultipartEncoder
允许您将数据流式传输到远程服务器,所以不必一次将文件读入内存。在您可能希望在
metadata
部分中传递实际的JSON数据;用有效的JSON文档替换(None, '', 'application/json; charset=UTF-8'
元组中的空字符串。在相关问题 更多 >
编程相关推荐