web-dev-qa-db-fra.com

Demande Curl GET avec paramètre json

J'essaie d'envoyer une requête "GET" à une API REST distante à partir d'une invite de commande via cURL, comme ceci:

curl -X GET -H "Content-type: application/json" -H "Accept: application/json"  "http://server:5050/a/c/getName/{"param0":"pradeep"}"

Mais il ne renvoie aucune sortie. J'ai essayé de faire un ping sur l'URL directement depuis le navigateur, je peux obtenir une réponse avec succès, je ne comprends pas ce qui ne va pas avec la commande.

En gros, je veux définir une requête "GET" à un service distant REST qui me donne des données JSON en réponse via curl. Quelqu'un peut-il me guider quelle erreur je fais? J'ai essayé divers articles, mais ils parlent tous de POST demandes non de GET.

103
Pradeep Simha

Cela devrait fonctionner:

  curl -i -H "Accept: application/json" "server:5050/a/c/getName{'param0':'pradeep'}" 

option utilisateur -i au lieu de x.

125
Harshal Bulsara

Si vous souhaitez envoyer vos données à l'intérieur du corps, vous devez alors créer un POST ou PUT au lieu de GET.

Pour moi, on dirait que vous essayez d'envoyer le requête avec les paramètres uri , qui n'est pas lié à GET, vous pouvez aussi mettre ces paramètres sur POST, PUT et ainsi de suite.

La requête est une partie facultative, séparée par un point d'interrogation ("?"), Contenant des informations d'identification supplémentaires qui ne sont pas de nature hiérarchique. La syntaxe de la chaîne de requête n'est pas définie de manière générique, mais elle est généralement organisée comme une séquence de paires =, les paires étant séparées par un point-virgule ou une esperluette.

Par exemple:

curl http://server:5050/a/c/getName?param0=foo&param1=bar
15
Martin Seeler

GET prend des paires nom/valeur.

Essayez quelque chose comme:

curl http://server:5050/a/c/getName/?param1=pradeep

ou

curl http://server:5050/a/c/getName?param1=pradeep

btw un habituel REST devrait ressembler à quelque chose comme

curl http://server:5050/a/c/getName/pradeep S'il prend JSON dans l'URL GET, ce n'est pas une méthode standard.

7
user2877889

Pour les services protégés par nom d'utilisateur et mot de passe, utilisez les éléments suivants:

curl -u admin:password -X GET http://172.16.2.125:9200 -d '{"sort":[{"lastUpdateTime":{"order":"desc"}}]}'
4
Sandeep K V

Essayer

curl -G ...

au lieu de

curl -X GET ...

Normalement, vous n'avez pas besoin de cette option. Toutes sortes de requêtes GET, HEAD, POST et PUT sont plutôt appelées à l'aide d'options de ligne de commande dédiées.

Cette option modifie uniquement le mot réel utilisé dans la requête HTTP, elle ne modifie pas le comportement de curl. Ainsi, par exemple, si vous souhaitez effectuer une demande HEAD appropriée, l'utilisation de -X HEAD ne suffira pas. Vous devez utiliser l'option -I, --head.

3
smci

Si vous voulez vraiment soumettre la demande GET avec JSON dans le corps, vous pouvez:

curl -X GET \
  -H "Content-type: application/json" \
  -H "Accept: application/json" \
  -d '{"param0":"pradeep"}' \
  "http://server:5050/a/c/getName"

La plupart des serveurs Web modernes acceptent ce type de demande.

1
Steven Soroka

Aucune des solutions mentionnées ci-dessus n'a fonctionné pour moi pour une raison quelconque. Voici ma solution. C'est assez basique.

curl -X GET API_ENDPOINT - H 'Type de contenu: application/json ' - d ' JSON_DATA '

API_ENDPOINT est votre point de terminaison d'api, par exemple: http://127.0.0.1:80/api

- H a été utilisé pour ajouter un contenu d'en-tête.

JSON_DATA est le corps de votre demande. Il peut s'agir de quelque chose comme :: {"data_key": "value"}. '' entourant JSON_DATA est important.

Tout ce qui suit - d correspond aux données que vous devez envoyer dans la demande GET.

1
bhatman