Pourquoi curl tronque cette chaîne de requête?

Je suis sûr que la réponse à cette question va être un problème de codage de caractères douloureusement évident …

J’utilise curl sur la ligne de commande pour tester certains points de terminaison dans une application python. Le noeud final prend les parameters URL de latitude et de longitude. Rien de bien spécial Je mets dans la commande:

curl -v -L http://localhost:5000/pulse/?lat=41.225&lon=-73.1 

Le serveur répond avec une sortie en boucle détaillée:

 * Connected to localhost (127.0.0.1) port 5000 (#0) > GET /pulse/?lat=41.225 HTTP/1.1 > User-Agent: curl/7.21.6 (i686-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3 > Host: localhost:5000 > Accept: */* > * HTTP 1.0, assume close after body < HTTP/1.0 500 INTERNAL SERVER ERROR < Content-Type: application/json < Content-Length: 444 < Server: Werkzeug/0.8.1 Python/2.7.2+ < Date: Wed, 01 Feb 2012 17:06:29 GMT < { "msg": "TypeError: float() argument must be a string or a number", "flag": 0, "stack": [ "Traceback (most recent call last):", " File \"engine.py\", line 139, in dispatch_request", " return getattr(self, 'action_'+endpoint)(request, **values)", " File \"engine.py\", line 818, in action_getpulse", " lon = float(request.args.get('lon'))" ], "err": 1 * Closing connection #0 } [1]+ Done 

Sur la deuxième ligne de ce vidage, il est évident que le second paramètre, lon , n’est pas envoyé. Qu’est-ce que je fais mal? Merci.

La réponse à la question “qu’est-ce que je fais mal” est que le shell voit l’esperluette ( & ) et pense que c’est la fin de la commande (et la met en arrière-plan). Vous devez le citer, c’est pourquoi les réponses qui citent la chaîne fonctionnent. Vous pourriez aussi facilement lancer ceci:

 curl -v -L "http://localhost:5000/pulse/?lat=41.225&lon=-73.1" 

Je pense que vous pouvez essayer ceci:

  curl -v -L -d "lat=41.225&lon=-73.1" http://localhost:5000/pulse 

par défaut, cela appelle POST. Si vous voulez envoyer une requête GET

  curl -v -L -G -d "lat=41.225&lon=-73.1" http://localhost:5000/pulse 

Plus…
et comme vous utilisez localhost , si vous utilisiez https , vous voudriez probablement inclure -k comme une option pour ignorer les erreurs de certificate

Merci à Ross pour avoir souligné cela.