2017-08-31 1 views
0

Verwenden von Python 3.5 und Anforderungen 2.18.4 Ich muss Daten an einen anderen Dienst senden, und es ist derzeit aus irgendeinem Grund fehlgeschlagen. Der Versand erfolgt, nachdem ich Daten von einem anderen Dienst empfangen und bereinigt habe, und schließlich die Daten als natives Python-Dict verifiziert und festgelegt. Dies funktioniert, wenn die Daten hartcodiert ist, und ich bin nicht die eingehenden Daten (hartcodiert json string) mit:Failing requests.post bei Verwendung von json.dumps

def my_post_method(self, url, data): 
    # import requests (above) 
    return requests.post(
     url, 
     data='{"keyA":"valA", "keyB":"valB" ... }', 
     headers={'Content-Type': 'application/json'}, 
    ) # status 200 

Aber ich kann es aus irgendeinem Grund nicht mit den Originaldaten senden.

def my_post_method(self, url, data): 
    # import requests, json (above) 
    d = json.dumps(data) 
    return requests.post(
     url, 
     data=d, 
     headers={'Content-Type': 'application/json'}, 
    ) # status 400 

d von oben: {"keyA":"valA", "keyB":"valB" ... }

Ich habe versucht, die Anforderungen json Parameter anstelle von Daten zu verwenden, aber der andere Dienst ist offenbar Datenparameter am anderen Ende zu erwarten. Bedeutet dies, dass der Dienst, auf den ich poste, auf eine json-formatierte Zeichenfolge wartet?

+0

Können wir den anderen Service kennen? Ist es etwas öffentliches, was wir ausprobieren können? – GendoIkari

+0

Haben Sie versucht, den POST erneut mit der fest codierten Zeichenfolge zu erstellen? Ist es möglich, dass der Dienst 400s zurückgibt, weil er nicht möchte, dass Sie dieselbe Anfrage zweimal stellen? –

+0

Vielen Dank @Rob Watts, aber ich antwortete unten - aus irgendeinem seltsamen Grund wurde Reihenfolge der Schlüssel-Werte berücksichtigt, wenn das Empfangsende die eingehenden Daten überprüft wurde. Ich weiß wirklich nicht warum ... – camelBack

Antwort

2

Ich würde das Argument json in requests.post verwenden, das Python-Wörterbücher akzeptiert, wenn Sie mindestens Version 2.4.2 von Anforderungen verwenden und vollständig vermeiden.

More complicated requests

EDIT: ich das Problem nicht in irgendeiner Weise reproduzieren kann, soll json arbeiten, es ist der einzig richtige Weg, um eine json mit einem Beitrag in der modernen requests zu senden.

+0

Ich kann nicht- es scheitert wenn ich es tue (ich schrieb oben) Sollte ich meine Anfragen herunterstufen? (2.18.4-> 2.4.2) – camelBack

+0

Haben Sie mit 'json' versucht, ohne einen Inhaltstyp anzugeben? – GendoIkari

+0

Ja, immer noch fehlgeschlagen – camelBack

Verwandte Themen