J'utilise Ubuntu et y ai installé cURL . Je veux tester mon application Spring REST avec cURL. J'ai écrit mon code POST côté Java. Cependant, je veux le tester avec cURL. J'essaie de publier des données JSON. Les données d'exemple sont comme ceci:
{"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}
J'utilise cette commande:
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
Il renvoie cette erreur:
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
La description de l'erreur est la suivante:
Le serveur a refusé cette demande car l'entité de demande est dans un format non pris en charge par la ressource demandée pour la méthode demandée ().
Journal Tomcat: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051
Quel est le bon format de la commande cURL?
Voici mon PUT
code latéral Java (j'ai testé GET et DELETE et ils fonctionnent):
@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;
}
json
rest
spring-mvc
curl
http-headers
kamaci
la source
la source
Réponses:
Vous devez définir votre type de contenu sur application / json. Mais
-d
envoie le Content-Typeapplication/x-www-form-urlencoded
, qui n'est pas accepté du côté de Spring.En regardant la page de manuel curl , je pense que vous pouvez utiliser
-H
:Exemple complet:
(
-H
est l'abréviation de--header
,-d
pour--data
)Notez que cela
-request POST
est facultatif si vous utilisez-d
, car l'-d
indicateur implique une demande POST.Sous Windows, les choses sont légèrement différentes. Voir le fil de commentaires.
la source
curl -X POST -H "Content-Type: application/json" -d "{ \"key1\": \"value1\" }" http://localhost:3000/api/method
"{ """key1""": """value1""" }"
. Aussi cette réponse: stackoverflow.com/questions/18314796/…Essayez de mettre vos données dans un fichier, dites
body.json
, puis utilisezla source
--data-binary
option au lieu de--data
. On peut s'attendre à ce que le client envoie les données telles quelles, mais--data
supprime CR et LF de l'entrée.@
caractère avant le nom du fichier, sinon cela ne fonctionnera pas. Je viens de passer 20 minutes à me cogner la tête à cette merde ...Vous pourriez trouver resty utile: https://github.com/micha/resty
Il s'agit d'un wrapper round CURL qui simplifie les demandes REST en ligne de commande. Vous le pointez vers votre point de terminaison API et il vous donne des commandes PUT et POST. (Exemples adaptés de la page d'accueil)
De plus, il est souvent toujours nécessaire d'ajouter les en-têtes de type de contenu. Vous pouvez le faire une fois, cependant, pour définir une valeur par défaut, pour ajouter des fichiers de configuration par méthode et par site: Définition des options RESTY par défaut
la source
Pour Windows, avoir un seul devis pour la
-d
valeur n'a pas fonctionné pour moi, mais cela a fonctionné après être passé à un double devis. J'ai également eu besoin d'échapper aux guillemets doubles entre crochets.Autrement dit, les éléments suivants n'ont pas fonctionné:
Mais ce qui suit a fonctionné:
la source
Cela a fonctionné pour moi en utilisant:
Il a été heureusement mappé au contrôleur Spring:
IdOnly
est un POJO simple avec une propriété id.la source
Par exemple, créez un fichier JSON, params.json, et ajoutez-y ce contenu:
Ensuite, vous exécutez cette commande:
la source
Je viens de rencontrer le même problème. Je pourrais le résoudre en spécifiant
la source
Cela a bien fonctionné pour moi.
Où,
-X
Signifie le verbe http.--data
Désigne les données que vous souhaitez envoyer.la source
-X POST
est redondant dans cet exempleVous pouvez utiliser Postman avec son interface graphique intuitive pour assembler votre
cURL
commande.Code
cURL
dans la liste déroulantecURL
commandeRemarque: Il existe plusieurs options pour la génération automatisée de demandes dans la liste déroulante, c'est pourquoi j'ai pensé que mon message était nécessaire en premier lieu.
la source
En utilisant CURL Windows, essayez ceci:
la source
Vous pouvez utiliser postman pour convertir en CURL
la source
HTTPie est une alternative recommandée
curl
car vous pouvez faire simplementIl parle JSON par défaut et gérera à la fois la définition de l'en-tête nécessaire pour vous ainsi que l'encodage des données en tant que JSON valide. Il y a aussi:
pour les en-têtes, et
pour les paramètres de chaîne de requête. Si vous avez un gros morceau de données, vous pouvez également le lire à partir d'un fichier qu'il soit encodé en JSON:
la source
Si vous testez de nombreux envois / réponses JSON par rapport à une interface RESTful, vous pouvez consulter le plug-in Postman pour Chrome (qui vous permet de définir manuellement les tests de service Web) et sa commande Newman basée sur Node.js. compagnon en ligne (qui vous permet d'automatiser les tests par rapport aux "collections" de tests Postman.) Gratuit et ouvert!
la source
Cela a bien fonctionné pour moi, en plus d'utiliser l'authentification BASIC:
Bien sûr, vous ne devez jamais utiliser l'authentification BASIC sans SSL et un certificat vérifié.
J'ai rencontré cela de nouveau aujourd'hui, en utilisant cURL 7.49.1 de Cygwin pour Windows ... Et lorsque vous utilisez
--data
ou--data-binary
avec un argument JSON, cURL est devenu confus et interpréterait{}
le JSON comme un modèle d'URL. L'ajout d'un-g
argument pour désactiver la globalisation cURL a corrigé cela.Voir aussi Passer une URL avec des crochets pour boucler .
la source
Vous pouvez également mettre votre contenu JSON dans un fichier et le transmettre à curl en utilisant l'
--file-upload
option via une entrée standard, comme ceci:la source
Cela a fonctionné pour moi:
la source
J'utilise le format ci-dessous pour tester avec un serveur Web.
Supposons ce format de dict JSON:
Exemple complet
la source
Utilisez l'option -d pour ajouter une charge utile
En plus:
utiliser -X POST pour utiliser la méthode POST
utilisez -H 'Accept: application / json' pour ajouter un en-tête de type accept
utilisez -H 'Content-Type: application / json' pour ajouter un en-tête de type de contenu
la source
Veuillez vérifier cet outil . Il vous aide à créer facilement des extraits de boucles.
la source
Cela a fonctionné pour moi sur Windows10
la source
Voici une autre façon de le faire, si vous avez des données dynamiques à inclure.
la source
Je sais, beaucoup a été répondu à cette question, mais je voulais partager où j'ai eu le problème de:
Vous voyez, j'ai tout fait correctement, une seule chose - "@" j'ai raté avant le chemin du fichier JSON.
J'ai trouvé un document de référence pertinent sur Internet - https://gist.github.com/subfuzion/08c5d85437d5d4f00e58
J'espère que cela pourrait aider quelques-uns. Merci
la source
Si vous configurez SWAGGER sur votre application Spring Boot et appelez n'importe quelle API à partir de votre application, vous pouvez également voir cette demande CURL.
Je pense que c'est le moyen facile de générer les demandes via le CURL.
la source
Vous pouvez passer l'extension du format souhaité comme fin de l'URL. comme http: // localhost: 8080 / xx / xxx / xxxx .json
ou
http: // localhost: 8080 / xx / xxx / xxxx .xml
Remarque: vous devez ajouter les dépendances jackson et jaxb maven dans votre pom.
la source