首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用box-api的JSON无效

使用box-api的JSON无效
EN

Stack Overflow用户
提问于 2012-10-28 11:19:07
回答 3查看 1.1K关注 0票数 0
代码语言:javascript
复制
 def get_item_url(itemid, itemtype):
if itemtype=="folder" or itemtype=="FOLDER":
    url = "https://api.box.com/2.0/folders/"+itemid
    headers = {'Authorization' : 'BoxAuth api_key='+apikey+'&auth_token='+auth_token,}
    payload = {'shared_link': {'access': 'Open'}}
    r = requests.request("PUT", url, None, json.dumps(payload), headers)
    print r.content
    return r.content
elif itemtype=="file" or itemtype=="FILE":
    url = "https://api.box.com/2.0/files/"+itemid
    headers = {'Authorization' : 'BoxAuth api_key='+apikey+'&auth_token='+auth_token,}
    payload = {'shared_link': {'access': 'Open'}}
    r = requests.request("PUT", url, None, json.dumps(payload), headers)
    print r.content
    return r.content

这是我用来获取项目url的代码,根据传递给方法的字符串,可以是文件,也可以是文件夹。但是这不起作用,Box API总是返回一个"Invalid JSON“错误。有人能帮帮我吗?我什么都试过了!我尝试使用双引号和单引号,只放置“有效负载”,而不是通过json.dumps运行它。我试着添加它作为另一个标题,所有的东西,但我就是不能让它工作!

我也尝试过对httpbin.org/put执行同样的请求,结果如下:

代码语言:javascript
复制
{
"origin": "10.217.61.17",
"files": {},
"form": {},
"url": "http://httpbin.org/put",
"args": {},
"headers": {
"Content-Length": "",
"Accept-Encoding": "identity, deflate, compress, gzip",
"Accept": "*/*",
"Host": "httpbin.org",
"Content-Type": "",
"Authorization": "BoxAuth api_key=<API_KEY>&auth_token=<AUTH_TOKEN>"
},
"json": null,
"data": ""
}
EN

回答 3

Stack Overflow用户

发布于 2012-10-30 00:36:38

对于httpbin响应,这肯定是请求本身的问题,而不是Box API的问题。

尝试设置请求的格式,如下所示:http://docs.python-requests.org/en/latest/user/quickstart/#custom-headers

代码语言:javascript
复制
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> headers = {'content-type': 'application/json'}

>>> r = requests.post(url, data=json.dumps(payload), headers=headers)
票数 1
EN

Stack Overflow用户

发布于 2012-10-28 11:45:36

既然你只是硬编码你的JSON,为什么不这样做呢:

代码语言:javascript
复制
payload = '{"shared_link": {"access": "Open"}}'
r = requests.request("PUT", url, None, payload, headers)
票数 0
EN

Stack Overflow用户

发布于 2012-10-30 02:19:47

几件事

您应该显式地为每个请求HTTP方法设置参数,并且还应该使用内置的函数来发出HTTP请求,而不是直接使用request对象,即

代码语言:javascript
复制
r = requests.request("PUT", url…)

你应该改为这样做

代码语言:javascript
复制
r = requests.put(url…)

如果这样做(并显式设置参数),您的新逻辑应该如下所示:

代码语言:javascript
复制
url = "https://api.box.com/2.0/files/"+itemid
headers = {'Authorization' : 'BoxAuth api_key='+apikey+'&auth_token='+auth_token,}
payload = {'shared_link': {'access': 'Open'}}
r = requests.put(url, headers=headers, data=json.dumps(payload))
print r.content
return r.content

此外,response对象将允许您访问发送过来的实际请求对象。因此,在您之前尝试发出的请求中,您实际上可以看到通过执行以下操作发送过来的JSON

代码语言:javascript
复制
r = requests.put(url, headers=headers, data=json.dumps(payload))
print r.request.data
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13106113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档