2016-12-13 2 views
2

Wenn ich sende auf eine Website eine HTTP-Post heraus, dass ich eine Antwort erhalten, die auf meinem Web-DebuggerHandhabung Nachschlüssel in HTTP-Post-Antwort in Python

wie folgt aussieht
payload = 
      { 
     'name': 'simpson' 
    , 'color': 'red' 
    , 'color': 'orange' 
    , 'color': 'blue' 
    , 'color': 'orange' 
     'food' : 'pizza' 
     } 

Aber in Python, wenn ich die gleichen auszuzusenden Anfrage und do r.headers Ich bekomme diese Antwort

Antwort

0

Dieses Format ist gültig JSON, aber es enthält Informationen, die nicht von JSON dargestellt werden können.

Die Lösung wäre, JSON nicht zu verwenden, sondern einen Encoder zu schreiben, der eine Liste von Paaren (2 Wertetupel) für die Datenpunkte verwendet.

Update:

data = [ 
    ('name', 'simpson'), 
    ('color', 'red'), 
    ('color', 'orange'), 
    ... 
    ('food', 'pizza'), 
] 
content = "{%s}" % ', '.join("'%s': '%s'" % pair for pair in data) 

POST Inhalt.

+0

Also das ist die Anfragen Module Fehler ?? Ich bin ein Anfänger in Python und weiß nicht, wie es geht, gibt es eine andere Möglichkeit, Anfragen zu senden und die volle Antwort – OPP

+0

Der Service ist ein wenig seltsam. Verwenden Sie JSON nicht, es ist niemandes Schuld. Erstellen Sie eine Zeichenfolge mit dem, was Sie senden möchten, und senden Sie sie anschließend POST. – Javier

0

Es hängt davon ab, wie Sie die Anfrage stellen. Tatsächlich ist der HTTP-Antworttext immer ein Text, der je nach dem, was Sie zum Anfordern verwenden, als JSON oder etwas anderes interpretiert werden kann. Wahrscheinlich versucht Ihre Bibliothek, ein JSON der angegebenen Daten und des Fehlers zu erstellen, da solche Daten nicht als JSON interpretiert werden können, da sie mehrere Werte enthalten, die zum selben Schlüssel gehören. Ich würde Ihnen empfehlen, den rohen Antworttext zu extrahieren und ihn in geeigneter Weise zu parsen. Zum Beispiel können Sie httplib verwenden, um anzufordern:

import httplib 

conn = httplib.HTTPConnection("www.thehost") 
conn.request("POST", "/post/url/you/request", "data1=q&data2=w", {...some hreaders...} 
response = conn.getresponse() 
body = response.read() # body is the text you need, it's a string 
response.close() 
conn.close()