2015-08-13 85 views
0

我想通过休息api发布请求结构。python请求错误422

我的代码:

def pack_orders(self, orderItemId, invoiceDate, invoiceNumber, tax, serialNumbers=None, subOrderItemId = None, subSerialNumbers = None, subInvoiceDate = None, subTax = None): 
    url = "https://api.flipkart.net/sellers/orders/labels" 
    payload = {[{"orderItemId": orderItemId, 
       "serialNumbers": serialNumbers, 
       "invoiceDate": invoiceDate, 
       "invoiceNumber": invoiceNumber, 
       "tax": tax, 
       "subItems": [{ 
        "orderItemId": subOrderItemId, 
        "serialNumbers": subSerialNumbers, 
        "invoiceDate": subInvoiceDate, 
        "tax": subTax}] 
       }],} 
    return self.session.post(url, params=payload) 

调用上面的函数:

label = fk.pack_orders(orderItemId='232519872', invoiceDate='2015-08-13',  invoiceNumber='INVSTR01', tax=5) 
print label.status_code 
print label.url 
print label.content 

它抛出错误422.我知道它做的请求参数结构的东西。我无法查明错误的来源。

以下是任何帮助文档的链接。 Documentation

回答

4

API是JSON格式的预期数据。
另外python requests简单易用。 (使用壳)

import requests 

data = {[{"orderItemId": orderItemId, 
       "serialNumbers": serialNumbers, 
       "invoiceDate": invoiceDate, 
       "invoiceNumber": invoiceNumber, 
       "tax": tax, 
       "subItems": [{ 
        "orderItemId": subOrderItemId, 
        "serialNumbers": subSerialNumbers, 
        "invoiceDate": subInvoiceDate, 
        "tax": subTax}] 
       }],} 

r = requests.post(url, json=data) 
r.status_code 
r.json() 


样品请求:

成功进行该请求。得到无效认证的401(原因很明显)

In [19]: import requests 

In [20]: url = "https://api.flipkart.net/sellers/orders/labels" 

In [21]: data = [{ 
    ....:  "orderItemId": 1179576, 
    ....:  "serialNumbers": ["IMEI1-UNIT1"], 
    ....:  "invoiceDate": "2014-08-29", 
    ....:  "invoiceNumber": "INV-01", 
    ....:  "tax": 100.98, 
    ....:  "subItems": [{ 
    ....:   "orderItemId": 1173467, 
    ....:   "serialNumbers": [ ], 
    ....:   "invoiceDate": "2014-08-29", 
    ....:   "tax": 10.98 
    ....:  }] 
    ....: }] 

In [22]: r = requests.post(url, json=data) 

In [23]: r.status_code 
Out[23]: 401 

In [24]: r.json() 
Out[24]: 
{u'error': u'unauthorized', 
u'error_description': u'An Authentication object was not found in the SecurityContext'} 
+0

它说不可排列型列表 –

+0

它还是会抛出同样的错误。 –

+0

我的不好。将此从'json.loads(data)'更改为'json.dumps(data)' –

0

你应该尝试:的

return self.session.post(url, data=payload) 

代替

return self.session.post(url, params=payload)