0
 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 总是返回“无效 JSON”错误。谁能帮帮我,我什么都试过了!我尝试使用双引号、单引号,只放置“有效负载”而不是通过 json.dumps 运行它。我已经尝试将它添加为另一个标题,一切,但我无法让它工作!

我也尝试过对 httpbin.org/put 做同样的请求,这就是我得到的回报:

{
"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": ""
}
4

3 回答 3

1

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

尝试像这里的示例那样格式化请求:http: //docs.python-requests.org/en/latest/user/quickstart/#custom-headers

>>> 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)
于 2012-10-29T16:36:37.803 回答
0

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

payload = '{"shared_link": {"access": "Open"}}'
r = requests.request("PUT", url, None, payload, headers)
于 2012-10-28T03:45:36.483 回答
0

一些东西

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

r = requests.request("PUT", url…)

你应该改为

r = requests.put(url…)

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

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

此外,响应对象将允许您访问发送过来的实际请求对象。因此,在您之前尝试发出的请求中,您实际上可以通过以下方式看到正在发送的 JSON

r = requests.put(url, headers=headers, data=json.dumps(payload))
print r.request.data
于 2012-10-29T18:19:46.907 回答