cURL:如何输入具有特殊字符的变量的URL

问题描述:

我有一个变量中的URL,它是从另一个地方读取的。该变量具有?&字符。如果我在单引号或双引号之间输入整个URL,它可以正常工作。但是如果我输入变量,curl会抱怨这个URL有非法字符。我如何绕过这个?cURL:如何输入具有特殊字符的变量的URL

PS:我也试图与%3F%26更换?&,但没有奏效。

实施例:

$ echo "$location" 
https://example.com/dothis?param1=something&param2=somethingelse 
$ curl "$location" -o /dev/null > /dev/null 
curl: (3) Illegal characters found in URL 
$ curl "https://example.com/dothis?param1=something&param2=somethingelse" -o /dev/null > /dev/null 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 126k 0 126k 0  0 13974  0 --:--:-- 0:00:09 --:--:-- 32272 
+0

这里不能重现这一点。可能是因为URL中有不可见的字符。也许,在重新定义你的'location'变量后再试一次。 –

+0

试试'echo“$ location”| LC_ALL = C cat -vet'来查看变量中是否有任何不可见的字符。请注意'-e'会使它在行尾添加一个“$”;除此之外的任何事情都是潜在的问题。 –

+0

这是正确的@GordonDavisson。 'cat -A'在'$'之前显示'^ M'。万分感谢。 –

可能会有一些不可见的字符。所以请尝试

printf '%s' "$location" | hexdump -C 
+0

你是那么对。在hexdump中有一个由点表示的最终字符,这样做是为了比较工作。谢谢你,'curl“$ {location :: $ {#location} -1}”-o/dev/null' –