我可以通过执行以下操作来发布一个 json文件:
url = 'https://myWebsite.com/ext/ext/ext'
json_file = open("/Users/ME/folder/folder/folder/folder/test.json")
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(url, data=json_file, headers=headers)
但是当我尝试使用iglob:
遍历目录中的所有json文件时url = 'https://myWebsite.com/ext/ext/ext'
json_files = glob.iglob("/Users/ME/Documents/folder/folder/folder/*.json")
for data in json_files:
test = {'file': open(data)}
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(url, data=test, headers=headers)
服务器抛出一些疯狂的错误,表明我发布了无效的JSON原语。我正在为这两种方法使用 exact 相同的json文件,但由于某种原因,第二种方法失败了。
答案 0 :(得分:1)
你不在这里使用字典:
for data in json_files:
test = open(data)
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(url, data=test, headers=headers)
当使用data
的字符串或打开文件对象以外的任何内容时,您最终会发布 application/x-www-form-urlencoded
内容正文,因为requests
会对请求正文进行编码为了你。您只想发布文件的内容,因为您想要发送application/json
正文。
请注意,在单个文件测试中,您不也使用了字典。
最好使用打开的文件作为上下文管理器,以确保它再次关闭:
for data in json_files:
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
with open(data) as test:
r = requests.post(url, data=test, headers=headers)