REST post mit Python-Anfrage
Warum funktioniert dieser einfache code-POST-Daten zu meinem service:
import requests
import json
data = {"data" : "24.3"}
data_json = json.dumps(data)
response = requests.post(url, data=data_json)
print response.text
Ist und mein Dienst ist entwickelt mit WCF so :
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/test", ResponseFormat =
WebMessageFormat.Json,RequestFormat=WebMessageFormat.Json)]
string test(string data );
Hinweis: Wenn entfernen Sie die input-parameter data
funktioniert alles einwandfrei, was kann das Problem sein.
Wenn Sie sagen, es funktioniert nicht, was meinst du genau? Aus dem letzten "Hinweis", es klingt wie es ist mehr als nur "ignoriert" meine Daten" (da ohne die Daten "alles funktioniert"), aber dann genau das, was geschehen?
Nun, ich denke, dass ich das Problem entdeckt. Ist es mit der {"data" : "24.3"} .. für einige Gründe, die ich mitschicken, die als string-das ist, wenn mein Antrag geht durch.. wie diese "{data : 24.3}" .. jemand darauf, zu erklären, Gründe ?
Haben Sie versucht
Nun, ich denke, dass ich das Problem entdeckt. Ist es mit der {"data" : "24.3"} .. für einige Gründe, die ich mitschicken, die als string-das ist, wenn mein Antrag geht durch.. wie diese "{data : 24.3}" .. jemand darauf, zu erklären, Gründe ?
Haben Sie versucht
data = {"data": 24.3}
(Hinweis: ein float, kein string)? Ich weiß nicht, WCF, aber hier ist eine andere interpretation: string test(string data)
könnte bedeuten, dass Ihre server erwartet einen einzelnen string als Eingabe (data_json = '"something"'
(Hinweis: es ist ein Python-string mit json-text, der darstellt, json-string)), und es nicht zu erwarten, dass ein json-Objekt. Streng genommen "application/json" darstellen muss entweder ein json-Objekt (z.B. data_json = '{"a", 1}'
) oder einem json-array (z.B. data_json = '[1,2,3]'
) deshalb ist es falsch, anzunehmen, nur ein string.InformationsquelleAutor Suave Nti | 2012-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die content-type-header:
Wenn ich
url
zuhttp://httpbin.org/post
, dass server-echos zu mir zurück, was gepostet wurde:Wenn Sie
requests
version 2.4.2 oder höher, können Sie die JSON-Kodierung für die Bibliothek; es werden automatisch die richtigen Content-Type-header, auch für Sie. Pass in die zu sendenden Daten als JSON in derjson
keyword argument:Content-type
früher, aber kein Glück. Gibt es irgendein problem mit meinem WCF .. Wenn ich entfernen Sie die Input-param kann ich die URL aufrufen. Ich weiß nicht, was kann das Problem sein.Nun, ich denke, dass ich das Problem entdeckt. Es ist mit der
{"data" : "24.3"}
.. für einige Gründe, die ich mitschicken, die als string-das ist, wenn mein Antrag geht durch.. wie diese "{data : 24.3}" .. jemand darauf, zu erklären, Gründe ?dann sind Sie nicht mehr senden, ein JSON-Objekt, sondern ein JSON-string. Das wäre ein server-Seite-Problem, nichts mit Python oder
requests
.versuchen Sie einfach, sich mit
http://httpbin.org/post
als URL; er antwortet mit einer JSON-Struktur, einschließlich einejson
- Taste, um Ihnen zu zeigen, was JSON-es zu empfangen, wenn Sie Sie senden, JSON.in Absprache mit dem Kommentar server erwartet einen json-string, so dass ich übergeben zu müssen, ein json-string eher als ein Objekt. Danke, Cheers !!
InformationsquelleAutor Martijn Pieters