web-dev-qa-db-ja.com

curlコマンドでURLをエンコードする方法はありますか?

クエリパラメータにスペースがあるURLがあります。これをカールで使用したいのですが、.

curl -G "http://localhost:30001/data?zip=47401&utc_begin=2013-8-1 00:00:00&utc_end=2013-8-2 00:00:00&country_code=USA"

それは与える

Malformed Request-Line

私の理解によると、o/pはクエリパラメータに存在するスペースによるものです。

Curlコマンドに提供する前に、URLを自動的にエンコードする方法はありますか?

114
Aashish P.

curl--data-urlencodeで内部的にURLエンコードをサポートします:

$ curl -G -v "http://localhost:30001/data" --data-urlencode "msg=hello world" --data-urlencode "msg2=hello world2"

-Gも、データをURLに追加するために必要です。

トレースヘッダー

> GET /data?msg=hello%20world&msg2=hello%20world2 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu)
> Host: localhost
> Accept: */*
182
damphat
 curl -G "$( echo "$URL" | sed 's/ /%20/g' )"

どこ $URLは、翻訳を行うURLです。

また、URLには複数の種類の翻訳(エンコーディング)を含めることができるため、次のようにすることもできます。

curl -G "$(Perl -MURI::Escape -e 'print uri_escape shift, , q{^A-Za-z0-9\-._~/:}' -- "$URL")"

代わりに。

6
Drav Sloan