Curl URL_EFFECTICE с HASH

Я только что выпустил инструмент, который собрал и использую вытащить информацию о контактах Google. Он здесь https://github.com/gedl/gc-csv

Я наткнулся на эту ветку в поисках такого инструмента, но не смог найти ни одного, который делает именно то, что мне нужно. Это может быть полезно для других.

1
06.07.2018, 02:52
2 ответа

Curl загрузить целых страниц.
#указывает на фрагмент .

Оба несовместимы.


хэш

Символ #используется в конце ссылки на веб-страницу для обозначения позиции внутри всей веб-страницы.

Его основное использование заключается в перемещении «слоя представления» (того, что просматривается ), в начало элемента.

завиток

В curl нет «слоя представления», его цель — загрузить целые страницы, а не части или фрагменты страниц. Таким образом, маркер «фрагмент» в curl бесполезен. Он просто игнорируется curl.

Обходной путь

Re -добавить тег к (перенаправленной )ссылке:

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")
1
27.01.2020, 23:43

Согласно этой ветке на сайте curlпод названием:Re :Как отправить часть фрагмента URL? Решетка предназначена для браузера, а не для сервера, поэтому curlусекает ее.

The fragment part of a URI is not meant to be sent in the HTTP request - it is used to identify a specific section in the resource that will be fetched by using the particular URI. If you want to force #-letter into the request I think encoding it sounds like a perfect idea.

Посмотрев, я не нашел никакого способа для curlсохранить его, кроме кодирования его как %23,что я не думаю, что вы хотите.

Решение

Поскольку это клиент, который поддерживает строку после хэш-метки, я бы «наклонился к ней» и просто проанализировал ее, а затем повторно -добавил ее к возвращаемому URL-адресу из curl, как это сделал бы настоящий клиент браузера. сделай это:

$ 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

Ссылки

1
27.01.2020, 23:43

Теги

Похожие вопросы