AFHTTPClient를 사용하여 토네이도 서버에 연결하려고합니다. 서버 측에AttributeError : 객체에 'json_args'속성이 없습니다.
- (id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self setDefaultHeader:@"User-Agent" value:@"Client"];
[self setDefaultHeader:@"Accept" value:@"application/json"];
self.parameterEncoding = AFJSONParameterEncoding;
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
짖는 소리 나는 설치 핸들러, :
class BaseHandler(tornado.web.RequestHandler):
@property
def db(self):
return self.application.db
def prepare(self):
if self.request.headers.get("Content-Type") == "application/json":
self.json_args = tornado.escape.json_decode(self.request.body)
그런 다음이 핸들러의 서브 클래스를 구축 : 다음은 클라이언트에서 내 코드는
class TimelineHandler(BaseHandler):
def post(self):
user_id = self.json_args.get("user_id")
device_id = self.json_args.get("device_id")
token = self.json_args.get("token")
//do something with the request
self.write(response)
그러나 때 이 코드를 실행하면 다음 오류 메시지와 함께 실패합니다.
HTTPRequest(protocol='http', host=<CORRECT URL HERE>, method='POST', uri='CORRECT URL HERE', version='HTTP/1.0', remote_ip='127.0.0.1', body='{"user_id":1,"device_id":"b9af8d9039ec1e527fecca70caf486e1","token":"36c9a0fe-2c4f-4273-9e12-0f855e05de87"}', headers={'Content-Length': '107', 'Accept-Language': 'en;q=1, fr;q=0.9, de;q=0.8, ja;q=0.7, nl;q=0.6, it;q=0.5', 'Accept-Encoding': 'gzip, deflate', 'X-Scheme': 'http', 'Host': 'CORRECT URL HERE', 'Accept': 'application/json', 'User-Agent': 'Client', 'Connection': 'close', 'X-Real-Ip': '58.246.153.177', **'Content-Type': 'application/json**; charset=utf-8'})
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1077, in _execute
*self.path_args, **self.path_kwargs)
File "/server.py", line 128, in post
user_id = self.json_args.get("user_id")
**AttributeError: 'TimelineHandler' object has no attribute 'json_args'**
이상한 점은 요청 헤더에 분명히 'Content-Type': 'application/json'이 표시된다는 것입니다. 그렇다면 핸들러에 여전히 'json_args'속성이없는 이유는 무엇입니까?
토네이도 3.0을 사용하고 있습니다.
내게 조언을 해줄 수 있으면 정말 고마워.
self.request.headers.get ("Content-Type")의 "application/json"이 인 경우 다음과 같이 입력 할 수 있습니다. 그러면 charset = utf-8이 정의되었는지 여부에 관계없이 일치합니다 –