Как использовать wget / curl для загрузки с сайта, на котором я вошел?


46

Некоторые части википедии выглядят по-разному, когда вы вошли в систему. Я хотел бы видеть пользовательские страницы, чтобы они выглядели так, как будто я вошел в систему.

Есть ли способ, которым я могу wget пользовательские страницы, как это

http://en.wikipedia.org/wiki/User:A

это страница входа в систему:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3


См. Stackoverflow.com/a/21919431/1136018 для простого решения с помощью Google Chrome + cURL
pterojacktyl

Ответы:


50

Самый простой способ: войдите в свой браузер и дайте куки на wget

Самый простой способ: в общем, вам нужно предоставить wget или curl с (вошедшими в систему) cookie-файлами с определенного веб-сайта, чтобы они могли выбирать страницы, как если бы вы вошли в систему .

Если вы используете Firefox, это легко сделать с помощью дополнения Export Cookies . Установите дополнение и:

  1. Перейдите в Инструменты ... Экспорт файлов cookie и сохраните cookies.txtфайл (вы можете изменить имя файла / место назначения).
  2. Откройте терминал и используйте wgetс --load-cookies=FILENAMEопцией, например,

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Для локона этоcurl --cookie cookies.txt ...

(Я постараюсь обновить этот ответ для пользователей Chrome / Chromium)

Сложный путь: используйте curl (желательно) или wget для управления всей сессией

  • Подробные инструкции выходят за рамки этого ответа, но вы используете curl с параметром --cookie-jarили wget с --save-cookies --keep-session-cookiesпараметрами вместе с методом HTTP / S PUT, чтобы войти на сайт, сохранить файлы cookie для входа и затем использовать их для симулировать браузер
  • Нет необходимости говорить, что для этого требуется пройти через HTML-источник для страницы входа в систему (получить имена полей ввода и т. Д.), И часто бывает трудно заставить работать сайты, использующие что-либо, кроме простой аутентификации по имени и паролю.
  • Подсказка: если вы идете по этому пути, зачастую гораздо проще иметь дело с мобильной версией веб-сайта (если она доступна), по крайней мере, для этапа аутентификации.

1
Хороший совет. Код для мобильного сайта часто чище.
Кузен Кокаин

4
как выглядит такой cookie.txt?
Фредерик Норд,

Это дополнение «Экспорт файлов cookie» создало файл cookie с файлами cookie для каждого сайта, к которому я обращался в Firefox. Поэтому, следуя этому ответу, вы будете представлять все свои куки-файлы на любом сайте, на который вы заходите. Я считаю это недостатком безопасности в этом ответе. Вы можете легко обойти эту проблему, используя: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers


Вы можете использовать надстройку Cookie Manager в Firefox для экспорта только выбранных файлов cookie.
Ганс Гинзель

7

Еще одно простое решение, которое сработало для меня, не устанавливая ничего лишнего:

Это даст вам команду, которую вы можете вставить прямо в вашу оболочку, которая имеет все ваши учетные данные cookie, например

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

Затем вы можете изменить URL-адрес в команде, чтобы получить все, что вы хотите.


4

С cURL действительно легко обрабатывать куки в обоих направлениях.

curl www.target-url.com -c cookie.txtзатем сохранит файл с именем cookie.txt. Но вы должны войти в систему , поэтому необходимо использовать --data с аргументами типа: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Получив cookie-файл в журнале, вы можете отправить его: curl www.target-url.com/?user-page.php -b cookie.txt

Просто используйте -c (--cookie) или -b (--cookie-jar) для сохранения и отправки.

Примечание 1: Использование cURL CLI намного проще, чем PHP, и, возможно, быстрее;)

Для сохранения окончательного содержимого вы можете легко добавить его > filename.htmlв команду cURL, а затем сохранить полный HTML-код.

Примечание 2 о "full": Yo не может отобразить javascript с помощью cURL, просто получить исходный код.


1
-XПараметр означает «делать пост», но использование --data=xxx -Xнеявно, так что вы можете удалить его обязательно.
erm3nda

-bэтоread cookie
Тимо

3

Для тех, кто все еще интересуется этими вопросами, есть очень полезное расширение Chrome под названием CurlWGet, которое позволяет создавать wget/ curlзапрос с мерами аутентификации и т. Д. Одним щелчком мыши. Чтобы установить это расширение, выполните следующие действия:

  1. Установите расширение из интернет- магазина Chrome .
  2. Перейдите на веб-страницу, которую вы хотели бы скачать.
  3. Начните загрузку.
  4. Расширение сгенерирует для вас ссылку.

Наслаждайтесь!


2

В блоге Wget с Firefox Cookies показано, как получить доступ к файлу данных sqlite, в котором Firefox хранит свои куки. Таким образом, не нужно вручную экспортировать куки для использования с wget. Комментарий предполагает, что он не работает с сессионными куки, но он работал нормально для сайтов, с которыми я пробовал.


2

взгляните на кликет для Firefox.

Когда вы собираетесь загружать, в последнем диалоговом окне загрузки вы получаете возможность скопировать загрузку в виде командной строки curl в буфер обмена.


1

Вы пробовали это?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A

да - к сожалению, это не сработало = (
user784637

6
Примечание. Этот синтаксис работает только для базовой HTTP-аутентификации (когда в вашем браузере появляется специальное диалоговое окно «Имя пользователя / пароль»), но не для аутентификации на основе веб-страницы.
иш

Основной формат URL-адреса аутентификации HTTP: admin: admin@www.url.com, но, как сказал @izx, базовый HTTP - это функция браузера, а не программирование на PHP и не код. Если когда-нибудь вам понадобится получить доступ к защищенному URL-адресу htaccess, вы можете использовать этот режим; D
erm3nda

Я не понизил голос, но это не хороший способ аутентификации: если вы случайно сделаете такие скрипты общедоступными, люди смогут использовать ваш пароль.
Виллем Ван Онсем

1
Что с отрицательными голосами? Может быть не весь ответ, но все же ответ.
Перекодировать

1

Попробуйте что-то вроде:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

Смотрите также эту ссылку:

Как загрузить эту веб-страницу с помощью wget?


Как и любой вывод. Используйте, > filename.htmlчтобы сохранить вывод в текущем каталоге или указать полный путь к файлу. Это касается как систем Linux, так и Windows.
erm3nda

Итак, я вижу, что wget имеет много функций, таких как cURL или наоборот. Он может делать POST, поэтому он может делать вход на веб-сайты. Интересно.
erm3nda

1

Для более сложных входов в систему на основе веб-сайта вы также должны использовать скрипт Python и некоторый модуль, имитирующий браузер, например http://wwwsearch.sourceforge.net/mechanize/ вместо curlили wget.

Таким образом, сеансовые куки-файлы обрабатываются автоматически, вы можете переходить по ссылкам и заполнять формы входа в систему, и, таким образом, «писать сценарии» в процессе входа в систему, как если бы вы использовали веб-браузер.


Да, использование механизации может быть очень хорошим. Также (и первоначально) доступно в Perl, если это больше ваша чашка чая.
Андроль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.