如何在POST中将整数发送到Tornado的AsyncHTTPTestCase.fetch()?

时间:2017-06-14 03:52:14

标签: python tornado httpresponse

我使用python的Tornado框架来测试我的HTTP POST端点。为此,我使用fetch方法。

databaseReference = FirebaseDatabase.getInstance().getReference().child("yKlWu19vhqQXfL2tDlBNfMSduMe2");
databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      double lat = dataSnapshot.child("location/latitude").getValue(Double.class);
    }

当我这样做时,端点接收1.num = sign ? (int)va_arg(args, int) : (unsigned int)va_arg(args, unsigned int); 2.if (sign) num = (int)va_arg(args, int); else num = (unsigned int)va_arg(args, unsigned int); 作为字符串 data = urllib.urlencode({ 'integer_arg': 1, 'string_arg': 'hello' }) resp = AsyncHTTPTestCase.fetch('/endpoint', method='POST', headers={'h1': 'H1', 'h2': 'H2', 'Content-Type': 'application/json'}, body=data) ,即使我希望它以整数形式接收它。这是可以理解的,因为integer_arg将其转换为字符串。 那么如何确保它收到整数? 只是取消对"1"的调用无效。

顺便说一句,当我使用裸卷曲调用点击同一个端点时,如下所示,端点正确地接收urllib.urlencode作为整数urllib.urlencode

integer_arg

1 个答案:

答案 0 :(得分:3)

curl中的正文与AsyncHTTPClient.fetch中的正文明显不同。使用python你可以在curl中对数据进行urlencode只有json。所以只需用json.dumps更改urlencode:

import json
from tornado.ioloop import IOLoop
from tornado.httpclient import AsyncHTTPClient
from tornado.gen import coroutine

@coroutine
def main():
    client = AsyncHTTPClient()
    body = json.dumps({
        'integer_arg': 1,
        'string_arg': 'hello'
    })
    yield client.fetch(
        '/endpoint', method='POST', body=body,
         headers={'h1': 'H1',  'h2': 'H2', 'Content-Type': 'application/json'}
    )

ioloop = IOLoop.instance()
ioloop.run_sync(main)