2017-03-10 6 views
0

Ich habe diese Funktion unter Verwendung von HTTP-Anfragen ohne Probleme zu behandeln:DELETE Anfrage in Python „Anfragen“ Modul funktioniert nicht mit Körper

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 

Wenn ich ohne Körper Einheit eine DELETE-Anfrage zu tun, habe ich nicht haben Probleme, aber wenn ich versuche, eine hinzuzufügen (wenn vom Server benötigt), erhalte ich eine Fehlermeldung vom Server, dass der Körper nicht null sein kann, als ob kein Körper gesendet worden wäre. Irgendwelche Ideen, warum das passieren könnte? Ich benutze Anfragen Modul und Python 2.7.12. Soweit ich weiß, können Daten in einer DELETE-Anfrage gesendet werden. Vielen Dank!

+0

Was meinst du mit „Körper Einheit“? – pbuck

+0

Ich meinte Entity Body oder Daten mit anderen Worten, tut mir leid, dass – user3192199

+0

Es gibt Probleme mit einigen Clients und einigen Servern, wenn DELETE Entity-Body enthält: http://StackOverflow.com/Questions/299628/IS-Antity-Body- erlaubt-für-eine-HTTP-Lösch-Anfrage, zum Beispiel & viele Suchergebnisse. Einige Server (anscheinend) konvertieren die DELETE in einen POST, andere führen einfach die DELETE aus, aber den Körper fallen lassen. In Ihrem Fall untersuchen, ob Ihr Server das Löschen mit Körper erlaubt? – pbuck

Antwort

0

Es gibt Probleme mit einigen Clients und einigen Servern, wenn DELETE entity body enthält: Is an entity body allowed for an HTTP DELETE request? zum Beispiel & viele Suchergebnisse.

Einige Server (anscheinend) konvertieren die DELETE in einen POST, andere einfach die DELETE, aber den Körper fallen lassen. In Ihrem Fall haben Sie untersucht, dass tatsächlich der Körper einer DELETE vom Server & gelöscht wurde, es wurde vorgeschlagen, dass Sie die DELETE zu POST ändern.

0

Mmm ... Ich kann ein DELETE mit Körper mit Postman senden und funktioniert OK. Aber ich kann das gleiche Ergebnis mit Anfragen erhalten 2.17.3

Dies ist ein Problem im Zusammenhang mit Anfragen

Verwandte Themen