使用 curl 更改用户域

使用 curl 更改用户域

当我输入命令时:

$curl -basic https://www.google.com$

我收到的输出只是我们访问网站时看到的 html 页面的文本。

但是当我执行时:

$curl -basic https://www.yahoo.com$

我没有收到任何输出,并且我的终端中的域从 更改username@computer_nameRegional Redirectusername@computername

这是什么意思?我对此感到不舒服,因为我一直以为我所做的是发送请求以接收 www 域索引页上的基于文本的内容。如果这个问题太模糊,我很抱歉,但我肯定想知道这里有什么区别。

提前致谢

答案1

您应该知道,添加选项时-basic实际上设置了多个参数。您可能想要执行的是--basic基本身份验证。而且最后的$符号可能是拼写错误。

如果您执行以下操作,是否会得到相同的意外行为?

curl https://www.yahoo.com

答案2

如果您需要始终获取 HTML 结果,我建议使用 curl 标志“-L”:

curl -L yahoo.com

或者

curl -L https://www.yahoo.com

此标志强制 curl 遵循所有 URL 重定向(图形浏览器行为)。如果网站多次重定向您,例如重定向到区域版本,您始终有机会获得最终 HTML。

来自 curl man:

-L,--位置

(HTTP)如果服务器报告请求的页面已移至其他位置(用 Location: 标头和 3XX 响应代码表示),此选项将使 curl 在新位置重新执行请求。如果与 -i、--include 或 -I、--head 一起使用,将显示所有请求页面的标头。使用身份验证时,curl 仅将其凭据发送到初始主机。如果重定向将 curl 带到其他主机,它将无法拦截用户+密码。另请参阅 --location-trusted 了解如何更改这一点。您可以使用 --max-redirs 选项限制要遵循的重定向数量。

当 curl 遵循重定向并且请求不是普通的 GET(例如 POST 或 PUT)时,如果 HTTP 响应是 301、302 或 303,它将使用 GET 执行以下请求。如果响应代码是任何其他 3xx 代码,curl 将使用相同的未修改的方法重新发送以下请求。

您可以使用专用选项 --post301、--post302 和 --post303 告诉 curl 在 30x 响应后不要将非 GET 请求方法更改为 GET。

相关内容