我使用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
答案 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)