Як використовувати wget / curl для завантаження з сайту, на якому я ввійшов?


46

Деякі частини вікіпедії відображаються по-різному, коли ви входите в систему. Я хотів би передати сторінки користувачів, щоб вони відображалися так, ніби я ввійшов у систему.

Чи є спосіб я побачити такі сторінки користувачів, як ця

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

Найпростіший спосіб: увійдіть у свій веб-переглядач та надайте файлам cookie wget

Найпростіший метод: загалом вам потрібно надати wget або curl (cookie-файли) з певного веб-сайту, щоб отримати сторінки, як якщо б ви ввійшли в систему .

Якщо ви використовуєте Firefox, це легко зробити за допомогою додатку " Експорт файлів cookie" . Встановіть надбудову та:

  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
Приємна порада. Код для мобільного сайту часто набагато чистіший.
CousinCocaine

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

Цей додаток "Експорт файлів cookie" створив файл файлів cookie з файлами cookie для кожного веб-сайту, до якого я отримував доступ у Firefox. Тож якщо ви дотримуєтесь цієї відповіді, ви представлятимете всі свої файли cookie на будь-якому веб-сайті, на яке ви потрапляєте. Я вважаю це недоліком безпеки в цій відповіді. Ви можете легко grep mydomain cookies.txt > mydomain-cookies.txt
подолати


Ви можете використовувати надбудову 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 по-справжньому легко обробляти файли cookie обома способами.

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 зберігає файли cookie. Таким чином, не потрібно вручну експортувати файли cookie для використання з wget. У коментарі можна стверджувати, що він не працює з файлами cookie сеансу, але він добре працював на сайтах, з якими я намагався.


2

подивіться на кліп для Firefox.

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


1

Ви пробували це?

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

так - на жаль, це не спрацювало = (
user784637

6
Примітка. Цей синтаксис працює лише для базової автентифікації HTTP (де у вашому браузері з'являється спеціальне діалогове вікно користувача / пароля), а не для аутентифікації на основі веб-сторінок.
Робочі

Основним форматом URL-адреси аутентифікації HTTP є адміністратор: 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 або viceversa. Це може робити POST, тому може робити вхід на веб-сайти. Цікаво.
erm3nda

1

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

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


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