在python中执行curl请求

时间:2017-01-24 14:26:22

标签: python json rest curl

我正在尝试在python中执行curl请求。我的代码如下:

url = 'http://xx.xxx.xx.xxx:xxxx/api/common/learningSessions/588752bef1d4654173a43015'          
payload = json.loads(open("request.json"))         
headers = {'X-User-Path': '....', 'X-User-Token': '...')
r = requests.get(url, data=json.dumps(payload), headers=headers)

我在第二行收到以下错误:

  

TypeError:期望的字符串或缓冲区(payload = json.loads(open(" request.json")))

知道这个错误是什么意思吗?

3 个答案:

答案 0 :(得分:3)

  

预期的字符串或缓冲区

open()返回一个文件。

json.load()json.loads()之间存在差异(第二个接受字符串,而不是文件)

此外,我不认为json.dumps()是必要的

答案 1 :(得分:3)

您正在打开文件open("request.json"),这将返回<open file 'request.json', mode 'r' at 0x108526810>

json.loads需要字符串。

你可以尝试

url = 'http://xx.xxx.xx.xxx:xxxx/api/common/learningSessions/588752bef1d4654173a43015'          
payload = json.loads(open("request.json").read())         
headers = {'X-User-Path': '....', 'X-User-Token': '...')
r = requests.post(url, data=json.dumps(payload), headers=headers)

file.read将返回文件内容而不是文件对象。

如果您不想使用read,可以直接使用json.load代替json.loads

这就是我试过的

echo '{}' > /tmp/test.json
cat /tmp/test.json
{}

尝试阅读相同的文件。

Python 2.7.10 (default, Jul 30 2016, 19:40:32)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> payload = json.loads(open("/tmp/test.json").read())
>>> print payload
{}

答案 2 :(得分:2)

您正在使用json.loads()但尝试加载文件。您需要改为使用json.load()

payload = json.load(open("request.json"))