2017-03-10 83 views
0

工作,我一直用這個功能來處理HTTP請求,沒有任何問題:刪除請求不與身體

def do_request(self, method, url, **kwargs): 

    params = kwargs.get('params', None) 
    headers = kwargs.get('headers', None) 
    payload = kwargs.get('data', None) 
    request_method = {'GET':requests.get, 'POST': requests.post, 'PUT': requests.put, 'DELETE': requests.delete} 

    request_url = url 

    req = request_method[method] 

    try: 
     res = req(request_url, headers=headers, params=params, data=json.dumps(payload)) 
    except (requests.exceptions.ConnectionError, requests.exceptions.RequestException) as e: 
     data = {'has_error':True, 'error_message':e.message} 
     return data 
    try: 
     data = res.json() 


     data.update({'has_error':False, 'error_message':''}) 
    except ValueError as e: 
     msg = "Cannot read response, %s" %(e.message) 
     data = {'has_error':True, 'error_message':msg} 

    if not res.ok: 
     msg = "Response not ok" 
     data.update({'has_error':True, 'error_message':msg}) 
    if res.status_code >= 400: 
     msg = 'Error code: ' + str(res.status_code) + '\n' + data['errorCode'] 
     data.update({'has_error':True, 'error_message': msg}) 

    return data 

當我需要做的沒有身體實體DELETE請求我沒有問題,但是當我嘗試添加一個(當服務器需要時),我從服務器收到一條錯誤消息,告訴主體不能爲null,就好像沒有主體已經發送一樣。任何想法,爲什麼這可能會發生?我正在使用請求模塊和Python 2.7.12。據我所知,數據可以通過DELETE請求發送。謝謝!

+0

你是什麼意思「身體實體」? – pbuck

+0

我的意思是實體或數據換句話說,對此表示遺憾 – user3192199

+0

當DELETE包含實體主體時,有些客戶端和某些服務器出現問題:http://stackoverflow.com/questions/299628/is-an-entity-body-允許的HTTP刪除請求,例如&許多搜索結果。一些服務器(顯然)將DELETE轉換爲POST,其他服務器只執行DELETE,但刪除正文。在你的情況下,調查你的服務器是否允許刪除身體? – pbuck

回答

0

當DELETE包含實體主體時,某些客戶端和某些服務器出現問題:Is an entity body allowed for an HTTP DELETE request?例如&大量搜索結果。

某些服務器(顯然)會將DELETE轉換爲POST,其他服務器只是執行DELETE,但刪除主體。就你而言,你已經調查過,確實,DELETE的主體被服務器&丟棄,因此建議你將DELETE更改爲POST。

0

嗯......我可以用郵差發送一個DELETE身體,並可以正常工作。但我不能得到與請求相同的結果2.17.3

這是一個問題有關請求