Есть вопрос по cURL’у, никак не могу разобраться с ним. Или может не им действовать надо…
Суть в чем. В одном институте злые дяди преподы не хотят открывать доступ к сохранению на компьютер методичек из электронной библиотеки. Раньше эти психи вообще заставляли к удаленному рабочему столу подключаться чтобы их полистать, теперь поставили некий движок электронной библиотеки Либэр.
Скачать

25 Responses to Есть вопрос по cURL

  1. Soaen:

    Мля. Гребанные горячие кнопки.

  2. Soaen:

    Ну так вот, скачать пдф целиком он не дает, но прямую ссылку на картинку вида http://elibrary.misis.ru/plugins/SecView… я добыть смог. Суть в чем: как через cURL (или что-то еще) залогиниться (вот страница логина http://elibrary.misis.ru/login.php), и, не теряя сессии получить эту картинку. Думаю, сделать цикл с перебором всех страниц до последней и склейку их обратно в пдф я осилю.
    Да, желательно всё это на php, потому что я, как быдлокодер, плюс-минус понимаю только его.

  3. TnaAll:

    Если у них там сессии на куках (скорее всего), получаешь печеньки, пишешь их в файл. Используешь по назначению сколько угодно раз.

    http://ru2.php.net/curl_setopt

    CURLOPT_COOKIEFILE
    The name of the file containing the cookie data. The cookie file can be in Netscape format, or just plain HTTP-style headers dumped into a file. If the name is an empty string, no cookies are loaded, but cookie handling is still enabled.

    CURLOPT_COOKIEJAR
    The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close.

    Либо можно ебануться на отличненько, активировать возврат заголовков ответа сервера (CURLOPT_HEADER), распарсить там строку с Set-Cookie:, записать всё это добро в массив, потом в последующих запросах подставлять полученное через CURLOPT_COOKIE.

  4. Soaen:

    На сессиях.

  5. Soaen:

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

  6. WebDev:

    что характерно, никто даже не спрашивает, какой язык

  7. NvrZZ:

    Stephan-V:
    Да, желательно всё это на php, потому что я, как быдлокодер, плюс–минус понимаю только его.
    Написал , 03.05.2012 в 22.30 | ответить.

  8. NvrZZ:

    дай доступ, я тебе выкачаю, и скрипт на перле/руби скину, php уже 8 лет не использовал.

  9. WebDev:

    пардон, не увидел

  10. TnaAll:

    а сессия где хранится? Правильно, в печеньках.)

    HTTP/1.1 200 OK
    Date: Thu, 03 May 2012 19:30:36 GMT
    Server: Apache/2.0.63 (Win32) mod_ssl/2.0.63 OpenSSL/0.9.8e PHP/5.2.5
    X-Powered-By: PHP/5.2.5
    Set-Cookie: PHPSESSID=ehmdg26k99m0bnv808a356dl41; path=/
    Expires: Thu, 03 May 2012 18:30:37 GMT
    Cache-Control: must-revalidate
    Pragma: no-cache
    Vary: User-Agent
    Content-Length: 2437
    Keep-Alive: timeout=2
    Connection: Keep-Alive
    Content-Type: text/html; charset=UTF-8

    Сохраняешь PHPSESSID любым из описанных выше способов и подставляешь дальше при любом запросе. Наверняка там после авторизации будут еще какие-то куки — их тоже надо таскать за собой. Поэтому мне больше нравится вариант с хранением кук в файле (cookie jar).

    Запрос POST задается через те же опции, ссылка на которые уже есть выше. Т.е. что-то типа:

    curl_setopt_array($c, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => array( ‘login’ => ‘vasya’, ‘pass’ => ‘pupkin’ )
    ));

  11. Oveer:

    помоему для твоей задачи проще вайлдкардами встроеными в курл воспользоваться без всяких похепе
    что-то типа:
    curl http://elibrary.misis.ru/plugins/SecView…?id=1234&page=[1-2]&type=small/fast -o «page#1.jpg» -b «cookies.txt»

  12. Oveer:

    парсер подвёл конечно, но я думаю идея понятна

  13. Oveer:

    а ну ещё чтоб не палиться прям курлом неплохо-бы юзерагент какого-нибудь хрома добавить

  14. WebDev:

    for i in `seq 1 999` do
    curl http://elibrary.misis.ru/plugins/SecView……?id=1234&page=${i}&type=small /fast –o «page${i}.jpg» –b «cookies.txt» -A ‘…IE 9…’
    done

  15. WebDev:

    Stephan-V: перед do точка с запятой ещё

  16. Oveer:

    Stephan-V: ну у меня как-бе тожесамое написано только curl-way

  17. KenGood:

    Я б python задействовал.
    Ставишь через pip либу

    import human_curl as hurl

    for x in xrange(100):
    r = hurl.get(«http://elibrary.misis.ru/plugins/SecView…%s&type=small/fast» % x, cookies={«PHPSESSID»: «ehmdg26k99m0bnv808a356dl41″}, user_agent=»Vasya»)

    Тут же и клеить можно, наверное.

    Вот и весь скрипт. Даже быдло php кодер способен понять. Не то что всякий там sh.

  18. WebDev:

    не вижу, чем использование пистона, да ещё и импорт либ лучше шелла

  19. WebDev:

    Stephan-V: точнее не импорт, а установка

  20. YeKMilk:

    Сложно как-то. wget.

  21. Avhen:

    то, что быдлокодер не способен понять 1, повторяюсь прописью, одну строку, написанную в командной строке, явно проблема не shell. Боюсь, что это даже не проблема php

  22. Soaen:

    Ну вот мне нагуглить удалось только курл. Я виндузятник, потому надежда написать батник угасла, когда я не смог научить батник логиниться. Отсюда и полезли всякие пхп и прочее.

  23. YeKMilk:

    Wget есть и для винды (и я им вполне успешно пользуюсь), на логиниться — это всего лишь отправлять Post.
    Зато никаких заморочек с рекурсивной загрузкой и т.д.

  24. TnaAll:

    гугли более лучше. Для windows есть чудесный GnuWin32, например:

    http://gnuwin32.sourceforge.net/packages

Добавить комментарий