1

コア API を使用して Zendesk で新しい組織を作成しようとしています。問題なく他の呼び出しを行うことができましたが、これは引き続き失敗します。次のコードは、問題を示しています。

url = "https://mydomain.zendesk.com/api/v2/organizations.json"
new_org = {"organization": {"name": "new organization"}}
data = urllib.urlencode(new_org)
req = urllib2.Request(url,data)
password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_manager.add_password(None, url, 'me@email.com', 'fakepassword')
auth_manager = urllib2.HTTPBasicAuthHandler(password_manager)
opener = urllib2.build_opener(auth_manager)
urllib2.install_opener(opener)
response = urllib2.urlopen(req)
bla = response.read()

次のエラーが発生します。

  Traceback (most recent call last):
  File "/network/nfshome0/homestore00/me/workspace/Pythony/pythony/test2.py", line   35, in <module>
    response = urllib2.urlopen(req)
  File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 406, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 438, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 890, in http_error_401
    url, req, headers)
  File "/usr/lib/python2.7/urllib2.py", line 865, in http_error_auth_reqed
    response = self.retry_http_basic_auth(host, req, realm)
  File "/usr/lib/python2.7/urllib2.py", line 878, in retry_http_basic_auth
    return self.parent.open(req, timeout=req.timeout)
  File "/usr/lib/python2.7/urllib2.py", line 406, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 444, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request

どんな助けでも大歓迎です!ありがとう。

4

1 に答える 1

0

あなたの問題は の使用に関連していますurllib.urlencodeドキュメントが示すように、これは次のようになります。

マッピング オブジェクトまたは一連の 2 要素タプルを「パーセントでエンコードされた」文字列に変換します。

Zendesk Organizations APIは、JSON データをリクエストの本文として受け取ることを想定しています。リクエストの形式が間違っているため、Zendeskはリクエストを理解できません。返された 400 ステータス コードは、これを示しています。ステータス コードに関するウィキペディア ページでは、400 ステータス コードを次のように説明しています。

サーバーは、クライアント エラーと見なされる何らかの理由で、リクエストを処理できないか、または処理しません (例:不正なリクエスト構文、無効なリクエスト メッセージ フレーミング、不正なリクエスト ルーティング)。

次のようにリクエストにデータを正しく含めることで、これを修正できます。

req = urllib2.Request(url, json.dumps(new_org))

requestsライブラリを使用すれば、本当に多くの労力を節約できます。これをテストするためにZendeskにアクセスすることはできませんが、コードを次のように書き換えることができると思われます:

import requests

new_org = {"organization": {"name": "new organization"}}
response = requests.post(
    "https://mydomain.zendesk.com/api/v2/organizations.json",
    auth=('me@email.com', 'fakepassword'),
    data=new_org
)
data = response.json()
于 2016-01-27T20:48:26.467 に答える