【linux】curl: (3) Illegal characters found in URLと怒られる | 瀬戸内の雲のように

【linux】curl: (3) Illegal characters found in URLと怒られる

Posted: 2018-01-09


スポンサーリンク

目次

はじめに

最近APIを扱うことが多くなり、curlコマンドを多用するようになりました。
昔(5年くらい前)はCLIのhttpクライアントと言えばwgetのほうが一般的だった気がするのですが、ここ最近ではすっかりcurlが定着した気がします。

さて、そんなcurlを使っていた時にあるエラーで困ってしまったのでメモしておきます。

関連記事

APIとは?をざっくり説明します
Pythonで書ける検証自動化:RobotFrameworkとは

背景

curlを使ってシェルスクリプトを書いた時のことです。リダイレクトの処理をさせる必要があったのですが、リダイレクト先ではHTTPメソッドを変えたいため、自分でURLを変数に入れ、複数回curlを実行するようなスクリプトを書きました。

つまり、こんな感じです

 # リダイレクト元へのcurl。${REDIRECT_URL}にリダイレクト先が格納される
REDIRECT_URL=`curl -D - -X POST -d "username=${USERNAME}" -d "password=${PASSWORD}" 'https://example.com/login' | awk '$1~/^Location/{print $2}'`

 # リダイレクト先へのcurl
curl -X GET "${REDIRECT_URL}"

これを実行すると、以下のようなエラーが出ました。

 # curl -X GET "${REDIRECT_URL}"
curl: (3) Illegal characters found in URL

ちなみにこの時、${REDIRECT_URL}には以下のような文字列が格納されています。

 # echo ${REDIRECT_URL}
https://example.com/auth/authorize?client_id=client&response_type=code+id_token&redirect_uri=https://example2.com/callback&state=abcdefghijk&scope=openid&nonce=ef123456789

確かに怪しい文字がいっぱい入ってはいますが、ちゃんとダブルクオーテーションでくくっているし、何が問題なんだろう?と小一時間悩みました。

原因

結論から言うと、末尾に改行が入っていたのが問題でした。
そして以下のように修正することで正しく動作しました。

curl -X GET "${REDIRECT_URL%$'\r'}"

上記の *%$'\r' * という部分でbashの変数展開の時に末尾の'\r'を削除しています。

なかなか該当の情報が出てこず苦労しました。。


スポンサーリンク




コメント一覧

2018/12/10 00:17:38

DLkfaumsさん

Download not working dll from http://founddll.com/nvd3dum-dll/ page. Fix the error now!


2018/12/13 04:09:37

Showkicさん

Looking for the best app to watch free movies on your iOS phone? Then your should check Showbox Application. This is the most famous app today that has a big library of tv shows and movies. This app is also available for pc users. But your need to download it first to enjoy free movies http://showbox-all.com/



コメントを投稿する


お名前


コメント内容





TOP back