0

Python-2.7で作成したTCPJSON-RPCサーバーに奇妙な問題があります。次のコードを使用してサーバーを構築しました。

https://github.com/joshmarshall/jsonrpclib

同じローカルネットワーク内からサーバーにクライアントを通信しています。コンソールウィンドウで、Python内からサーバーに接続し、サーバーに対してコマンドを実行できます。すべてが順調です。

ただし、モバイルアプリ(この場合はiPad)からJSON文字列を送信しようとすると、サーバーでエラーが発生します。また、JSON文字列を送信するためにこのツールをダウンロードしました:http ://www.simplecomtools.com/productcart/pc/downloads/tcptesttool.zipが、同じエラー結果になります。サーバーは「不正な要求構文」エラーを報告しています。私はいくつかの異なる文字列を試しました-表示されるエラーは次のとおりです:

192.168.1.107 --- [2012年10月13日09:48:17]コード400、メッセージ不正なリクエスト構文( "{'jsonrpc': '2.0'、'method':'add'、'params':[3、 6]、'id': '8'} ")192.168.1.107 --- [13 / Oct / 2012 09:48:17]" {'jsonrpc': '2.0'、'method':'add'、'params ':[3,6]、' id':' 8'} "400-

192.168.1.107 --- [2012年10月13日09:49:44]コード400、メッセージ不正なリクエスト構文('{"jsonrpc": "2.0"、 "method": "add"、 "params":[3、 6]、 "id": "8"}')192.168.1.107 --- [13 / Oct / 2012 09:49:44] "{" jsonrpc ":" 2.0 "、" method ":" add "、" params ":[3,6]、" id ":" 8 "}"400-

192.168.1.107 --- [2012年10月13日09:50:49]コード400、メッセージ不正なリクエスト構文('{"jsonrpc": "2.0"、 "method": "add"、 "params":{"x ":3、" y ":6}、" id ":" 8 "}')192.168.1.107 --- [2012年10月13日09:50:49]"{"jsonrpc": "2.0"、"メソッド":" add "、" params ":{" x ":3、" y ":6}、" id ":" 8 "}" 400-

192.168.1.107 --- [2012年10月13日17:11:59]コード400、メッセージ不正なリクエスト構文( "{'jsonrpc': '2.0'、'method':'add'、'params':{'x ':3、' y':6}、' id':8} ")192.168.1.107 --- [13 / Oct / 2012 17:11:59]" {'jsonrpc':' 2.0'、' method': 'add'、'params':{'x':3、'y':6}、'id':8} "400-

サーバーがリクエストの構文が悪いと考える理由が本当にわかりません。質問をすることさえ少しばかげていると感じます。構文エラーを解決するために何を試みることができるかについてのアイデアはありますか?

4

1 に答える 1

0

メッセージ1と4では、クライアントは実際にはJSONを送信していません。'の代わりに、文字列の境界を示すために使用しています"。一部のJSON実装では一重引用符がサポートされていますが、標準では無効です。"クライアントの実装を修正して、 -delimited文字列を使用して実際のJSONを送信します。

ただし、主な問題は、メッセージをHTTP POSTリクエストにラップするのではなく、生で送信することです。適切なJSONRPCリクエストは次のようになります。

POST / HTTP/1.0
Content-Length: 71

{"jsonrpc": "2.0", "params": [3, 6], "id": "er5qtdbz", "method": "pow"}

、しかし、あなたは最後の行だけを送っています。

Pythonでは、次のサンプルプログラムを使用して有効なリクエストを送信できます。

import json
try:
    from urllib.request import urlopen
except ImportError: # Python<3
    from urllib2 import urlopen

req = {"jsonrpc":"2.0","method":"add","params":[3,6],"id":0}
req_data = json.dumps(req).encode('utf-8')
u = urlopen('http://localhost:8080/', req_data)
print(u.read())
于 2012-10-14T20:21:58.873 に答える