Python cherrypy.request.body.read()返回空字节对象

Python cherrypy.request.body.read()返回空字节对象,python,paypal,Python,Paypal,我正在尝试使用cherrypy实现Paypal IPN侦听器。为了验证IPN,我必须将收到的确切post数据(订单和所有订单)发送回PayPal,并添加一个参数。由于Python dict是无序的,我不能以正常的方式读入post参数,因此我尝试使用cherrypy.request.body.read()读入原始post数据。但是它返回了一个空字节对象,我不知道为什么 下面是侦听器代码: class Server(object): @cherrypy.expose def ipn

我正在尝试使用cherrypy实现Paypal IPN侦听器。为了验证IPN,我必须将收到的确切post数据(订单和所有订单)发送回PayPal,并添加一个参数。由于Python dict是无序的,我不能以正常的方式读入post参数,因此我尝试使用cherrypy.request.body.read()读入原始post数据。但是它返回了一个空字节对象,我不知道为什么

下面是侦听器代码:

class Server(object):

    @cherrypy.expose
    def ipn_listener(self, **kwargs):
        print(kwargs)

        print("CONTENT LENGTH")
        cl = cherrypy.request.headers['Content-Length']
        print(cl)
        print("BODY")
        body = cherrypy.request.body.read(int(cl))
        print(body.decode('utf-8'))
        print("BODY LENGTH")
        print(len(body))
这些print语句的输出是

{'residence_country': 'US', 'mc_handling': '2.06', 'mc_gross_1': '12.34', 'address_city': 'San Jose', 'verify_sign': 'AFcWxV21C7fd0v3bYYYRCpSSRl31AQCuZQmE68wbtffSmpqH2dQ4nr9n', 'txn_id': '993769469', 'mc_handling1': '1.67', 'tax': '2.02', 'first_name': 'John', 'address_street': '123 any street', 'address_country': 'United States', 'notify_version': '2.1', 'payer_status': 'verified', 'mc_fee': '0.44', 'mc_gross': '12.34', 'address_name': 'John Smith', 'payment_type': 'instant', 'item_number1': 'AK-1234', 'invoice': 'abc1234', 'payment_status': 'Completed', 'address_state': 'CA', 'business': 'seller@paypalsandbox.com', 'mc_shipping': '3.02', 'address_zip': '95131', 'payment_date': 'Sun Mar 26 2017 14:27:51 GMT-0400 (EDT)', 'item_name1': 'something', 'address_status': 'confirmed', 'address_country_code': 'US', 'mc_currency': 'USD', 'test_ipn': '1', 'custom': 'xyz123', 'txn_type': 'cart', 'payer_id': 'TESTBUYERID01', 'payer_email': 'buyer@paypalsandbox.com', 'last_name': 'Smith', 'receiver_email': 'seller@paypalsandbox.com', 'mc_shipping1': '1.02', 'receiver_id': 'seller@paypalsandbox.com'}
CONTENT LENGTH
904
BODY

BODY LENGTH
0
关键字参数不是空的,所以我知道post数据正在处理。我可以读入身体数据的预期长度,但当我真的去读它时,我什么也得不到

任何想法都将不胜感激。谢谢