2014-04-26 4 views
1

http를 통해 json을 수락하고 데이터를 처리 한 다음 json을 요청한 클라이언트로 되 돌리는 jsonrpc2 서버를 만들려고합니다.python jsonrpc2 클라이언트 예가 httplib을 사용하여 원격 hello world 예제에 연결하고 있습니까?

나는 rpc 서버와 wsgi에 상당히 익숙하며 django와 같은 웹 프레임 워크의 일부로 만 사용했습니다.

jsonrpc2 설명서에 제공된 예제를 따르려고합니다. 첫 번째 단계는 서비스 나 서비스가 내가 원격 시스템에서 브라우저를 사용하고 탐색 할 때부터 노력하고 있습니다 알고

runjsonrpc2 hello 
runserver :8080 

을 시작하는 파일 hello.py

def greeting(name): 
    return dict(message="Hello, %s!" % name) 

다음 단계가 포함를 만드는 http://myip.dydns.org:8080는, 그것은 "405 방법이 허용되지 않음"내가 다음 단계는 내가 힘든 시간을 인식하지하고 무엇을 내 서버 쉘

DEBUG:root:jsonrpc 
DEBUG:root:check method 

에 디버그 정보를 참조로 응답합니다. json을 서비스에 보내고 응답을 얻으려면 python 클라이언트를 만드는 방법을 알고 싶습니다. 내가 뭘하려

은 다음과 같습니다

>>> from httplib import HTTPConnection 
>>> h = HTTPConnection("myip.dydns.org:8080") 
>>> from json import JSONEncoder 
>>> call_values = {'jsonrpc':'2.0', 'method':'greeting', 'id':'greeting'} 

파이썬을 사용하여 웹 서비스의 응답을 얻기 위해하는 단계 무엇인가.

슬프게도 jsonrpc2 문서는 로컬 테스트를 위해 웹 테스트 라이브러리의 TestApp만을 사용합니다.

원격 컴퓨터에서 클라이언트를 생성하고 인사말 기능에 대한 응답을받는 샘플 Python 코드를 찾을 수 없습니다.

누군가 나를 도와 줄 수 있습니까?

편집 : 조금 더 있습니다. 하지만 난 아직도 내가 서버를 참조 응답

>>> from httplib import HTTPConnection 
>>> con = HTTPConnection("myip.dyndns.org:8080") 
>>> import json 
>>> con.request('POST', '/', json.dumps({"jsonrpc": "2.0", "method": "casoff_jsonrpc2.greeting", "id":1.0,"params":{"name":"harijay"}},ensure_ascii=False).encode('utf-8'), {'Content-Type': 'application/json;charset=utf-8'}) 

의 내용을 얻을 수없는 다음 껍질

DEBUG:root:jsonrpc 
DEBUG:root:check method 
DEBUG:root:check content-type 
DEBUG:root:response {"jsonrpc": "2.0", "id": 1.0, "result": {"message": "Hello, harijay!"}} 

에 그러나 클라이언트에서 에코. 나는 결과를 얻는 방법을 모른다.

EDIT2 : 나는 마침내,

>>> con.getresponse().read() 

답변

0

난 당신이 파이썬에서 HTTP 클라이언트와의 작업을 수행 할 예정 requests

우수한 패키지를 시도 내가해야 할 일을했을이 모든

이었다 해결 나는 매우 것 requests을 배우는 것이 좋습니다 - 파이썬에서 다른 http 관련 모듈보다 배우고 사용하기가 더 쉽고, http를 통해 실험 할 때 스위스 군용 칼이되었습니다.

JSON-RPC를위한 경우에 사용하는 방법의 예는 여기에 있습니다 : 내가 요청 라이브러리와 같은 문제가 발생하고 https://stackoverflow.com/a/8634905/346478

+0

.디버그 : root : jsonrpc DEBUG : root : check method DEBUG : root : content-type을 확인하십시오. – harijay

+0

그래서 요청 라이브러리를 통해 ">>> r 메시지를 사용하여 200 응답을 얻고 있습니다. <응답 [200]> >>> r.text '' ""jsonrpc ":"2.0 ","id ": null,"오류 ": {"메시지 ":"구문 분석 오류 ","코드 " -32700}} ' " – harijay

+0

당신은 전부 거기 있습니다. r.json()을 호출하면 필요한 사전이 반환됩니다. –