このリンクをブラウザに入れると:
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
結果URLのハッシュを保存するためのcURLオプションはありますか?デフォルトでは、ブラウザのように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
答え1
カールのダウンロードみんなページ。
Aは#
以下を指す。分割。
どちらも互換性がありません。
ハッシュ
このシンボルは、#
Webページ全体の場所を表示するためにWebリンクの末尾に使用されます。
-
...HTML文書でアンカーポイントを参照するための「断片URL」という規則です。
-
これは「フラグメント」または「名前付きアンカー」です。文書の一部へのリンクを使用できます。
ウィキペディア: URL(Uniform Resource Locator)
ハッシュ(#)が前にあるオプションのフラグメントコンポーネントです。フラグメントには、URI の残りの部分として識別される記事のセクションタイトルなどの補助リソースの表示を提供するフラグメント識別子が含まれています。基本リソースがHTML文書の場合、フラグメントは通常、Webブラウザがスクロールして表示できる特定の要素のid属性です。
主な用途は、「プレゼンテーションレイヤー」(表示されるコンテンツ)をプロジェクトの先頭に移動することです。
カール
カールには「プレゼンテーションレイヤー」はありません。カールの目的は、ページの一部または一部ではなくページ全体をダウンロードすることです。したがって、カールの「フラグメント」タグは役に立ちません。カールでは無視されます。
解決策
(リダイレクトされた)リンクにタグを再リンクします。
originallink='https://unix.stackexchange.com/q/453740#453743'
wholepage=$(curl -Lso /dev/null -w %{url_effective} "$originallink")
if [ "$originallink" != "${originallink##*#}" ]; then
newlink=$wholepage#${originallink##*#}
else
echo "link contains no segment"
newlink="$wholepage"
fi
echo "$newlink"
以下を印刷します。
https://unix.stackexchange.com/questions/453740/installing-busybox-for-ubuntu#453743
より速い回避策は、ページをダウンロードしないことです。/dev/null
とにかくリダイレクトされます。そのオプションを削除し-L
(最初の)リダイレクトに従って、リンクが何であるかを尋ねます。最初のリダイレクトは、この場合と他のほとんどの場合に機能します。
wholepage=$(curl -so /dev/null -w %{redirect_url} "$originallink")
答え2
curl
ウェブサイトのこの投稿によると、タイトルは次のとおりです。Re:URLの部分を送るには?ハッシュタグはサーバーではなくブラウザ用なのでcurl
切り捨てられます。
URIのフラグメント部分は、HTTP要求で送信されるためのものではありません。これは、特定のURIを使用してインポートするリソースの特定の部分を識別するために使用されます。リクエストに#文字を強制するには、エンコーディングが完璧なアイデアのようです。
curl
私はそれをエンコードする以外に永続化する方法を見つけることができませんでした。%23
私はあなたが望むものではないと思います。
解決策
curl
ハッシュタグの後の文字列を保持するのはクライアントなので、実際のブラウザクライアントが行うように「解析」して単に解析し、返されたURLに再添付します。
$ set 'https://unix.stackexchange.com/q/453740#453743'
$ echo "$(curl -I -L -s -o /dev/null -w %{url_effective} "$1")#$(echo "$1" | cut -d"#" -f2)"
https://unix.stackexchange.com/questions/453740/installing-busybox-for-ubuntu#453743