如何处理 wget 下载链接中的特殊字符?

use*_*781 1 linux ssh terminal

我有一个这样的链接:

 wget --user=user_nm --http-password=pass123 https://site.domain.com/Folder/Folder/page.php?link=/Folder/Folder/Csv.Stock.php\&namefile=STOCK.Stock.csv
Run Code Online (Sandbox Code Playgroud)

但是虽然密码授权wget没问题,但仍然无法处理链接。为什么?

thk*_*ala 5

处理来自例如浏览器的链接时最安全的方法是使用单引号 ( ') 来引用整个链接字符串。这样 shell 就不会尝试分解它,而不必手动转义每个特殊字符:

wget --user=user_nm --http-password=pass123 'https://site.domain.com/Folder/Folder/page.php?link=/Folder/Folder/Csv.Stock.php&namefile=STOCK.Stock.csv'
Run Code Online (Sandbox Code Playgroud)

或者,举一个真实的例子:

wget --user-agent=firefox 'https://www.google.com/search?q=bash+shell+singl+quote&ie=utf-8&oe=utf-8&aq=t&rls=org.mageia:en-US:official&client=firefox-a#q=bash+single+quote&rls=org.mageia:en-US:official'
Run Code Online (Sandbox Code Playgroud)

请记住,服务器端的限制可能会使这样的使用wget变得非常困难。例如,谷歌禁止某些用户代理字符串,因此--user-agent上面的选项。其他服务器使用 cookie 来维护会话信息,简单地提供链接是wget行不通的。天啊。