2015-08-13 84 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)