【问题标题】:Why is curl truncating this query string?为什么 curl 截断这个查询字符串?
【发布时间】:2012-02-01 17:11:28
【问题描述】:

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

我在命令行上使用 curl 来测试 python 应用程序中的一些端点。端点采用纬度和经度的 url 参数。没什么特别的。我输入命令:

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。我究竟做错了什么?谢谢。

【问题讨论】:

  • 可能与原始问题无关,但如果我缺少部分查询字符串,我会返回 400 或其他内容,而不是 500。

标签: curl urlencode


【解决方案1】:

“我做错了什么”这个问题的答案是,shell 看到与号 (&amp;) 并认为这是命令的结尾(并将其置于后台)。您需要引用它,这就是引用字符串的答案起作用的原因。你可以很容易地运行这个:

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

【讨论】:

  • 我一直在 windows 下的 gitbash 上尝试,但没有太大成功
【解决方案2】:

我想你可以试试这个:

 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 作为忽略证书错误的选项

感谢Ross 指出这一点。

【讨论】:

  • 如果这是张贴的话会起作用,但不幸的是,参数必须通过 GET 作为 url 变量传递。
  • 即使在您的情况下(如问题),您是否尝试使用带双引号的查询字符串将您的 URL 括起来?
  • 并且由于您使用的是 localhost,如果您要使用 https,您可能希望包含 -k 作为忽略证书错误的选项。
  • 这些方法都不适合我。传递一个字符串,它总是以空白的形式出现。发送到 Grizzly 服务器。
猜你喜欢
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多