これに対する答えは、痛々しいほど明らかな文字エンコーディングの問題になると確信しています...
コマンドラインで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
そのダンプの2行目では、2番目のパラメーターlon
が送信されていないことは明らかです。何が間違っていますか?ありがとう。
「何が間違っているのか」という質問に対する答えは、シェルがアンパサンド(&
)そしてそれがコマンドの終わりだと考えます(そしてそれをバックグラウンドに入れます)。引用符で囲む必要があります。そのため、文字列を引用した回答が機能します。これも簡単に実行できます。
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
証明書エラーを無視するオプションとして
Ross に感謝します。