web-dev-qa-db-ja.com

bashスクリプトでcurlを使用してcurlを取得:(3)URLに不正な文字が見つかりました

したがって、ヘッダーの認証サーバーにカールする非常に単純なbashスクリプトがあります。ヘッダーURLはvarに書き込まれ、次のcurl呼び出しで使用されます。最初の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変数は次のようになります(不正な文字はありません)

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

端末でこれを行うと動作します:

$ 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}')

$ echo $ URL

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

次に、文字列をコピーして貼り付け、そのようにURLに再署名します(すべてターミナルで)。

>$ URL="https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534"
>$ curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt

できます。

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

Updateこれを実行しました: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.
39
gregwinn

$ URLの最後には\r(CR)が含まれています(0d)。で削除する

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

curlで使用する前に。

91
choroba

私も同じ問題を抱えていましたが、Windowsでスクリプトを作成したことが原因でした。つまり、行末に不要な\ rがありました。

Unix変換への簡単なdosがそれを修正しました。

dos2unix <scriptname>
3
ianiver9

ファイルの最後に入力することもできます。削除または削除してください。入力文字は表示可能なものではないことに注意してください。

0
ichak khoury