이 링크를 브라우저에 넣으면:
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는 #
다음을 가리킨다.분할.
둘은 호환되지 않습니다.
해시시
이 기호는 #
전체 웹 페이지 내의 위치를 표시하기 위해 웹 링크 끝에 사용됩니다.
-
...HTML 문서에서 앵커 포인트를 참조하기 위한 "조각 URL"이라는 규칙입니다.
링크에 파운드 기호 "#"이 있는 것은 무엇을 의미합니까?
이는 "조각" 또는 "이름이 지정된 앵커"입니다. 문서의 일부에 대한 링크를 사용할 수 있습니다.
위키피디아: URL(Uniform Resource Locator)
해시(#)가 앞에 오는 선택적 조각 구성 요소입니다. 조각에는 URI의 나머지 부분으로 식별되는 기사의 섹션 제목과 같은 보조 리소스 표시를 제공하는 조각 식별자가 포함되어 있습니다. 기본 리소스가 HTML 문서인 경우 조각은 일반적으로 웹 브라우저가 스크롤하여 볼 수 있는 특정 요소의 id 속성입니다.
주요 용도는 "프레젠테이션 레이어"(표시되는 콘텐츠)를 프로젝트 시작 부분으로 이동하는 것입니다.
곱슬
컬에는 "프레젠테이션 레이어"가 없습니다. 컬의 목표는 페이지의 일부나 조각이 아닌 전체 페이지를 다운로드하는 것입니다. 따라서 컬의 "fragment" 태그는 쓸모가 없습니다. 컬에서는 무시됩니다.
해결책
(리디렉션된) 링크에 태그를 다시 연결합니다.
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