为什么curl截断这个查询string?

我相信这个问题的答案将会是一些非常明显的字符编码问题。

我在命令行上使用curl来testingpython应用程序中的一些端点。 端点需要经纬度的url参数。 没什么特别的 我input命令:

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

服务器响应,具有详细的curl输出:

 * 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 

在该转储的第二行,很明显第二个参数lon不被发送。 我究竟做错了什么? 谢谢。

“我在做什么错”的问题的答案是shell看到&符号&并认为这是命令的结尾(并把它放到后台)。 你需要引用它,这就是为什么引用string的答案工作。 你可以轻松地运行这个:

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

我想你可以试试这个:

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

默认情况下,这个调用POST。 如果你想发送一个GET请求

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

更多…
而且由于您使用的是localhost ,如果您要使用https ,则可能需要包含-k作为忽略证书错误的选项

感谢罗斯指出这一点。