Ich benutze Ubuntu und habe cURL darauf installiert . Ich möchte meine Spring REST-Anwendung mit cURL testen. Ich habe meinen POST-Code auf der Java-Seite geschrieben. Ich möchte es jedoch mit cURL testen. Ich versuche, JSON-Daten zu veröffentlichen. Beispieldaten sind wie folgt:
{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}
Ich benutze diesen Befehl:
curl -i \
-H "Accept: application/json" \
-H "X-HTTP-Method-Override: PUT" \
-X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true \
http://localhost:8080/xx/xxx/xxxx
Es gibt diesen Fehler zurück:
HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1051
Date: Wed, 24 Aug 2011 08:50:17 GMT
Die Fehlerbeschreibung lautet wie folgt:
Der Server hat diese Anforderung abgelehnt, da die Anforderungsentität in einem Format vorliegt, das von der angeforderten Ressource für die angeforderte Methode () nicht unterstützt wird.
Tomcat-Protokoll: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051
Was ist das richtige Format des Befehls cURL?
Dies ist mein Java- PUT
Seitencode (ich habe GET und DELETE getestet und sie funktionieren):
@RequestMapping(method = RequestMethod.PUT)
public Configuration updateConfiguration(HttpServletResponse response, @RequestBody Configuration configuration) { //consider @Valid tag
configuration.setName("PUT worked");
//todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
return configuration;
}
quelle
Antworten:
Sie müssen Ihren Inhaltstyp auf application / json einstellen. Aber
-d
sendet den Content-Typeapplication/x-www-form-urlencoded
, die nicht auf Spring Seite akzeptiert wird.Wenn Sie sich die Curl-Manpage ansehen, können Sie Folgendes verwenden
-H
:Vollständiges Beispiel:
(
-H
ist die Abkürzung für--header
,-d
für--data
)Beachten Sie, dass
-request POST
ist optional , wenn Sie verwenden-d
, da die-d
Kennzeichen eine Aufforderung POST impliziert.Unter Windows sieht das etwas anders aus. Siehe den Kommentarthread.
quelle
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. Auch diese Antwort: stackoverflow.com/questions/18314796/…Versuchen Sie, Ihre Daten in eine Datei zu schreiben,
body.json
und verwenden Sie sie dannquelle
--data-binary
Option anstelle von verwenden--data
. Man würde erwarten, dass der Client die Daten so sendet, wie sie sind, aber--data
CR und LF von der Eingabe entfernt.@
vor dem Namen der Datei ein Zeichen einzufügen, da dies sonst nicht funktioniert. Ich habe gerade 20 Minuten damit verbracht, meinen Kopf gegen diesen Mist zuMöglicherweise finden Sie resty nützlich: https://github.com/micha/resty
Es ist eine Wrapper-Round-CURL, die Befehlszeilen-REST-Anforderungen vereinfacht. Sie zeigen auf Ihren API-Endpunkt und erhalten PUT- und POST-Befehle. (Beispiele von der Homepage angepasst)
Außerdem müssen die Header des Inhaltstyps häufig noch hinzugefügt werden. Sie können dies jedoch einmal tun, um einen Standardwert für das Hinzufügen von Konfigurationsdateien pro Methode und Standort festzulegen : Festlegen der Standardoptionen für RESTY
quelle
Unter Windows
-d
funktionierte ein einfaches Anführungszeichen für den Wert für mich nicht, aber nach dem Wechsel zu einem doppelten Anführungszeichen. Außerdem musste ich doppelte Anführungszeichen in geschweiften Klammern vermeiden.Das heißt, Folgendes hat nicht funktioniert:
Aber folgendes hat funktioniert:
quelle
Es hat bei mir funktioniert mit:
Es wurde glücklich dem Spring-Controller zugeordnet:
IdOnly
ist ein einfaches POJO mit einer id-Eigenschaft.quelle
Erstellen Sie beispielsweise eine JSON-Datei, params.json, und fügen Sie diesen Inhalt hinzu:
Dann führen Sie diesen Befehl aus:
quelle
Ich habe gerade das gleiche Problem. Ich könnte es durch Angabe lösen
quelle
Das hat bei mir gut funktioniert.
Wo,
-X
Bedeutet das http-Verb.--data
Bedeutet die Daten, die Sie senden möchten.quelle
-X POST
ist in diesem Beispiel redundantSie können Postman mit seiner intuitiven Benutzeroberfläche verwenden, um Ihren
cURL
Befehl zusammenzustellen.Code
cURL
aus der Dropdown-ListecURL
Befehl und fügen Sie ihn einHinweis: In der Dropdown-Liste gibt es mehrere Optionen für die automatische Generierung von Anfragen. Aus diesem Grund dachte ich, dass mein Beitrag überhaupt notwendig war.
quelle
Versuchen Sie unter CURL Windows Folgendes:
quelle
Sie können Postman verwenden, um in CURL zu konvertieren
quelle
HTTPie ist eine empfohlene Alternative zu,
curl
weil Sie nur tun könnenEs spricht standardmäßig JSON und behandelt sowohl das Festlegen des für Sie erforderlichen Headers als auch das Codieren von Daten als gültiges JSON. Es gibt auch:
für Überschriften und
für Abfragezeichenfolgenparameter. Wenn Sie einen großen Datenblock haben, können Sie ihn auch aus einer Datei lesen, die JSON-codiert ist:
quelle
Wenn Sie viele JSON-Sendungen / -Antworten gegen eine RESTful-Schnittstelle testen, sollten Sie das Postman- Plug-In für Chrome (mit dem Sie Webdiensttests manuell definieren können) und den auf Node.js basierenden Newman- Befehl überprüfen -line Begleiter (mit dem Sie Tests gegen "Sammlungen" von Postman-Tests automatisieren können.) Kostenlos und offen!
quelle
Dies funktionierte gut für mich, zusätzlich mit der BASIC-Authentifizierung:
Natürlich sollten Sie die BASIC-Authentifizierung niemals ohne SSL und ein geprüftes Zertifikat verwenden.
Ich bin heute mit Cygwins cURL 7.49.1 für Windows erneut darauf gestoßen ... Und bei Verwendung von
--data
oder--data-binary
mit einem JSON-Argument war cURL verwirrt und interpretierte das{}
im JSON als URL-Vorlage. Das Hinzufügen eines-g
Arguments zum Deaktivieren von cURL globbing hat das behoben.Siehe auch Übergeben einer URL mit Klammern zum Einrollen .
quelle
Sie können Ihren JSON-Inhalt auch in eine Datei einfügen und ihn mithilfe der
--file-upload
Option über die Standardeingabe wie folgt an Curl übergeben :quelle
Das hat bei mir funktioniert:
quelle
Ich verwende das folgende Format, um mit einem Webserver zu testen.
Nehmen wir dieses JSON-Diktatformat an:
Vollständiges Beispiel
quelle
Verwenden Sie die Option -d, um Nutzdaten hinzuzufügen
In Ergänzung:
Verwenden Sie -X POST, um die POST-Methode zu verwenden
Verwenden Sie -H 'Accept: application / json', um einen Header vom Typ accept hinzuzufügen
Verwenden Sie -H 'Content-Type: application / json', um den Header des Inhaltstyps hinzuzufügen
quelle
Dies funktionierte bei mir unter Windows10
quelle
Bitte überprüfen Sie dieses Tool . Es hilft Ihnen, auf einfache Weise Curl-Schnipsel zu erstellen.
quelle
Hier ist eine andere Möglichkeit, wenn Sie dynamische Daten einbeziehen möchten.
quelle
Ich weiß, auf diese Frage wurde viel beantwortet, aber ich wollte mitteilen, wo ich das Problem hatte:
Ich habe alles richtig gemacht. Nur eines - "@", das ich vor dem JSON-Dateipfad verpasst habe.
Ich habe im Internet ein relevantes Dokument gefunden - https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
Hoffe das könnte den wenigen helfen. Vielen Dank
quelle
Wenn Sie den SWAGGER für Ihre Spring-Boot-Anwendung konfigurieren und dort eine API aus Ihrer Anwendung aufrufen, können Sie auch diese CURL-Anforderung sehen.
Ich denke, dies ist der einfache Weg, um die Anfragen über die CURL zu generieren.
quelle
Sie können die Erweiterung des gewünschten Formats als Ende der URL übergeben. wie http: // localhost: 8080 / xx / xxx / xxxx .json
oder
http: // localhost: 8080 / xx / xxx / xxxx .xml
Hinweis: Sie müssen Ihrem POM Abhängigkeiten von Jackson und Jaxb Maven hinzufügen.
quelle