如果将此链接放在浏览器中:
https://unix.stackexchange.com/q/453740#453743
它返回这个:
https://unix.stackexchange.com/questions/453740/installing-busybox-for-ubuntu#453743
但是 cURL 会丢弃哈希:
$ curl -I https://unix.stackexchange.com/q/453740#453743
HTTP/2 302
cache-control: no-cache, no-store, must-revalidate
content-type: text/html; charset=utf-8
location: /questions/453740/installing-busybox-for-ubuntu
cURL 是否可以选择将哈希与结果 URL 一起保留?本质上,我正在尝试编写一个脚本,该脚本将像浏览器一样解析 URL - 这是我目前所拥有的,但如果 URL 包含哈希,它会中断:
$ set https://unix.stackexchange.com/q/453740#453743
$ curl -L -s -o /dev/null -w %{url_effective} "$1"
https://unix.stackexchange.com/questions/453740/installing-busybox-for-ubuntu
根据
curl
网站上标题为:Re:如何发送 URL 的片段部分?井号是针对浏览器而不是服务器的,因此为什么curl
要截断它。看起来我没有看到任何方法可以
curl
将它编码为%23
,我认为这不是你想要的。解决方案
由于在哈希标记之后维护字符串的是客户端,因此我会“倾向于它”并简单地将其解析出来,然后将其重新附加到返回的 URL 中,
curl
因为真正的浏览器客户端会这样做:参考
卷曲下载整个页面。
A
#
指向一个片段。两者都不兼容。
哈希
该符号
#
用于网页链接的末尾,以标记整个网页中的位置。片段 URL
当链接中有一个井号“#”时是什么意思
维基百科:统一资源定位器 (URL)
它的主要用途是将“表示层”(查看的内容)移动到项目的开头。
卷曲
curl 中没有“表示层”,它的目标是下载整个页面,而不是页面的部分或片段。因此,curl 中没有使用“片段”标记。它被 curl 简单地忽略了。
解决方法
将标签重新附加到(重定向的)链接:
将打印:
一个更快的解决方案是不下载该页面。
/dev/null
无论如何,它都被重定向到。通过删除该-L
选项并询问如果遵循(第一个)重定向,链接将是什么。第一个重定向适用于这种情况和大多数其他情况。