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

いくつかのこと

request各RequestsHTTPメソッドの引数を明示的に設定し、オブジェクトを直接使用する代わりに、つまり代わりに、HTTPリクエストを作成するための組み込み関数を使用する必要があります。

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 に答える
0

とにかくJSONをハードコーディングしているだけなので、これをやってみませんか:

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