2017-03-29 5 views
0

私は現在展開しているCRMシステムのAPIと通信するPythonスクリプトを作成しています。 CRMサーバーからデータを取得することはできますが、新しいエントリを追加(書き込み)することはできません。私は、Pythonやプログラミング全般に新しく、誰かが正しい方向に私を向けることができるので、私は愚かなことをしていると思いますか?サーバーはデータを拒否しませんが、新しいデータを送信するのではなく、/api/v1.0/paymentsからデータを要求しているかのように動作します。Python 3 urlopen usage

from urllib.request import Request, urlopen 

headers = { 
    'Content-Type': 'application/json', 
    'X-Auth-App-Key': '[API key]' 
} 

values = b""" 
    { 
"clientId": 104, 
"method": 3, 
"checkNumber": "", 
"createdDate": "2016-09-12T00:00:00+0000", 
"amount": 40, 
"note": "", 
    } 
""" 

request = Request('http://[SERVER_URL]/api/v1.0/payments', data=values, headers=headers) 

response_body = urlopen(request).read() 
print(response_body) 

私はここAPIドキュメントからのコード例に基づいて働いている: http://docs.ucrm.apiary.io/#reference/payments/payments/post

私は一番下に正しくurlopen使用していますか?

+0

あなたは、任意のデータを変更するように見えるだけのリクエスト&いくつかの情報を印刷していない:私はあなたのJSONデータを作成するために、jsonモジュールを使用してお勧めします。あなたは何をしたいのですか?どのようなエラーメッセージ(もしあれば)が表示されますか? –

答えて

0

This question/answerが問題になります。基本的にあなたのPOSTリクエストは/api/v1.0/payments/にリダイレクトされています(後続のスラッシュに注意してください)。POSTがGETリクエストにリダイレクトされると、サーバがリトリーブしようとしているかのように応答しますすべての支払い情報

その他の注意点として、あなたのjsonデータには、 'note'値の後に末尾の,が含まれているため、実際には無効であるため、問題が発生する可能性があります。ヘッダーにContent-Lengthヘッダーがないことも考えられます。

values = json.dumps({ 
    "clientId": 104, 
    "method": 3, 
    "checkNumber": "", 
    "createdDate": "2016-09-12T00:00:00+0000", 
    "amount": 40, 
    "note": "" 
}) 

headers = { 
    'Content-Type': 'application/json', 
    'Content-Length': len(values), 
    'X-Auth-App-Key': '[API key]' 
} 

request = Request('http://[SERVER_URL]/api/v1.0/payments/', data=values, headers=headers) 
+0

ありがとうございます。サーバーは実際にデータを拒否していないので、/api/v1.0/paymentsから情報を取得しようとしたときと同じ応答を送信します(json形式でサーバー上の既存の支払い情報をすべてダンプします)。 私はこれが私が使っているサンプルコードの問題かもしれないと思っていますが、プラットフォームのフォーラムに行く前に自分のコードで問題を整理したいと思います。 jsonモジュールをベストプラクティスとして使用していますか、または自分のコードの形式に問題がありますか? – Detoxica

+0

私はそれをベストプラクティスと考えていますが、私はこの問題に関しては何の権限もありません。オブジェクトのキーの値に簡単にPython式を使用できるので、確かに汎用性があります。あなたのコードの書式で問題が発生するのは、 '' note ":の後に続くカンマだけです。 – mshildt

+0

あなたの最初のコメントに追加した情報は、主な質問に含まれているはずです。それは実際にあなたが持っている実際の問題を記述するのに役立ちます。私の答えは私の更新を参照してください... – mshildt