无法使用iglob发布JSON文件?

时间:2014-05-28 17:10:21

标签: python json python-requests glob

我可以通过执行以下操作来发布一个 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文件,但由于某种原因,第二种方法失败了。

1 个答案:

答案 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)