Forum: PC-Programmierung Indy Post Json Http/1.1 400 bad request


von Nilix N. (nilix)


Lesenswert?

Ich bin gerade am verzweifeln

Ich will einen Post über Indy 10 an https://www.koronacloud.com senden
das will nicht.

//Dokumentation
https://www.koronacloud.com/web/api/v1/{token}/products/save/
POST
Add or updates a product
request
template params
token  string  the api token
representations
application/json;charset=utf-8
responses
status:
200 - OK - Response
representations
application/json;charset=utf-8    Result containing the new/updated 
product

//Meine Funktion
Request="https://www.koronacloud.com/web/api/v1/0132hu6ydfghhoyzttxgj3vj6r501lttqa4v5kqh01ebnp7ba5ziw/products/save/";;

Data["number"]="10";
Data["name"]="Artikel x";
json_string = json::Serialize(Data).c_str();

SL = new TStringList();
SL->Add(json_string.c_str());

DataModule1->IdHTTP1->Request->CustomHeaders->Clear();
DataModule1->IdHTTP1->Request->ContentType = 
"application/json;charset=utf-8";
DataModule1->IdHTTP1->Request->Accept = "application/json";
DataModule1->IdHTTP1->Request->ContentEncoding = "utf-8";
WebResponse = DataModule1->IdHTTP1->Post(Request,SL);

Weiss jemand wie ich diesn Post hinkriege
Ich erhalte immer Http/1.1 400 bad request

von Daniel A. (daniel-a)


Lesenswert?

Um welche Programmiersprache handelt es sich denn, ist das C++?
Kann man sich die API Beschreibung irgendwo Anschauen ohne sich 
Anzumelden?
Welches OS Nutzt du?
Hast du schon versucht mit Tools wie z.B. tcpflow oder wireshark 
nachzusehen, was genau gesendet wird?
Wenn du hier einfach so deinen API Token Postest, kann dann nicht jeder 
darüber Dateien Hoch und Runterladen?

von Nilix N. (nilix)


Lesenswert?

Hallo Daniel

Danke erstmal.
Die doku: https://www.koronacloud.com/web/api/v1?_wadl#idm234933736
leider sehr rudimentär.

Sprache: c++
OS Windows: 7
Tools tcpflow oder wireshark: Nein Kannte ich noch nicht schon mal ne 
gute Hilfe
API Token Postest: Das Frag ich mich auch aber schau mal die doku an.

Der Support kann hier scheinbar nicht helfen.

von T.roll (Gast)


Lesenswert?

Einfach mal geraten:
Die blocken deine Anfrage, weil du keinen User-Agent mitsendest.

Das machen die meisten Seiten um keine Resourcen an schrottige Bots zu 
verschwenden.

von Nilix N. (nilix)


Lesenswert?

>Die blocken deine Anfrage, weil du keinen User-Agent mitsendest.

Aha geht es genauer

von Kaj (Gast)


Lesenswert?


von Nilix N. (nilix)


Lesenswert?

Danke wars aber nicht

Ich erhalte HTTP/1.1 400 Bad Request

//Der Request stimmt aber
Request="https://www.koronacloud.com/web/api/v1/0132hu6yyiqwoyzttxgj3vj6r501lttqa4v5kqh01ebnp7ba5ziw/products/save/";;


//Die Parameter als Json Object
json::Object Data;

Data["number"]=Nr.c_str();
Data["name"]=Name.c_str();
json_string = json::Serialize(Data).c_str();

SL = new TStringList();
SL->Add(json_string.c_str());

DataModule1->IdHTTP1->Request->CustomHeaders->Clear();
DataModule1->IdHTTP1->Request->ContentType = 
"application/json;charset=utf-8";
DataModule1->IdHTTP1->Request->Accept = "application/json";
DataModule1->IdHTTP1->Request->ContentEncoding = "utf-8";
DataModule1->IdHTTP1->Request->UserAgent = "Office4bakery";
WebResponse = DataModule1->IdHTTP1->Post(Request,SL);

von Http (Gast)


Lesenswert?

Schau dir doch einen funktionierenden Request mal im Browser an, es kann 
gut sein das du mindestens noch einen Host-Header senden musst:
https://de.wikipedia.org/wiki/Host_Header
Also Host: www.koronacloud.com in diesem Falle.

von Nilix N. (nilix)


Lesenswert?

ne will nicht ich erhalte immer
400 Bad Request
Mein Request stimmt aber mit dem der Doku überein.

Der Service hat ihn mir nochmal geschickt und verglichen -> Identisch
Auch der Body stimmt.

https://www.koronacloud.com/web/api/v1/0132hu6yyiqwoyzttxgj3vj6r501lttqa4v5kqh01ebnp7ba5ziw/products/save
body: {"number": "1337","name": "testImport"}

von Jim M. (turboj)


Lesenswert?

Muss bei http Post ohne "multipart/form-data" der Inhalt nicht 
URLencode()t übertragen werden? Das würde den 400er Code erklären...

von Daniel A. (daniel-a)


Lesenswert?

@Jim Meba
Da als Content type bereits application/json;charset=utf-8 gesendet 
wird, sollte das schon passen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.