2016-01-26 4 views
23

私は非常に単純なbashスクリプトを使って、ヘッダーの認証サーバーにカールしています。ヘッダーurlはvarに書き込まれ、次のcurl呼び出しで使用されます。最初のカールコールでvar setを使用すると、「curl:(3)URLに不正な文字が見つかりました」というメッセージが表示されます。私はvarをエコーすることができ、すべてがよく見える、私もvarをリセットすることができます(私の例では)と動作します。上記の例を実行している場合bashスクリプトでcurlを使用してcurlを使用する:(3)URLに無効な文字が見つかりました

bashスクリプト

URL=$(curl -i -X GET -H "X-Auth-User: MyUserna,e" -H "X-Auth-Key: MyAPIKey" "https://urlToAuthServer.tld/auth/v1.0/" | grep "X-Storage-Url:" | awk '{print $2}') 

curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt 

私が取得:

curl: (3) Illegal characters found in URL 

URLのvarがこの(なし違法文字)

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534 
のように見えます

私はターミナルでこれを行うと、それは動作します:

$ URL = $(カール-i -X GET -H "X-AUTH-ユーザー:MyUserna、E" -H「X-Auth-キー:MyAPIKey "" https://urlToAuthServer.tld/auth/v1.0/ "| grep "X-Storage-Url:" | awkの '){$ 2印刷}'

$は今、私がコピーした文字列を貼り付けるので、(再びすべての端末で)のようなURLにreasign

https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534

$ URLをエコー:

これは機能します。

最初の例で「curl:(3)URLに不正な文字が見つかりました」というエラーが表示されるのはなぜですか?

更新 私はこの走っ:ここ printf %s "$URL" | xxd

を出力します(あなたのアイデアを得るまでに変更宛)

0000000: 6874 7470 733a 2f2f 6461 6c30 352e 6f62 https://server.ob 
0000010: 6a65 6374 7374 6f72 6167 652e 736f 6674 jectstorage.lite 
0000020: 6c61 7965 722e 6e65 742f 7631 2f41 5554 sabers.com/v1/AUT 
0000030: 485f 6665 3235 3339 3434 2d38 6433 322d H_aE2563981-7d32- 
0000040: 3432 3138 2d61 6566 632d 6665 6638 3465 4201-bdoi-fef94a 
0000050: 6166 3331 6232 0d      ag11c8. 
+0

空白、改行、隠し文字のURL? 'printf%s" $ URL "で試してみてください。 xxd'。 – choroba

+0

@choroba、私は "。"最後のように: 0000050:6166 3331 6232 0d af31b2。 出力の最後の行です。 – gregwinn

答えて

51

$ URLが最後に\r(CR)が含まれてい(0d)。

URL=${URL%$'\r'} 

で除外してからcurlと使用してください。

+2

ありがとう!それは動作します! – gregwinn

+0

%でパラメータを展開すると '$ '\ r''がパターンに展開され、そのパターンがURLから削除されることが分かります。しかし、なぜ '\ r'の前に$が必要ですか? – Noumenon

+2

@ヌメメオン: ''\ r'は2つの文字、バックスラッシュと' r'のため、 '$ '\ r''は1文字のCRです。 '$ '...''は ''...''とは異なる引用符です。 – choroba

関連する問題