php curl cookie авторизация

Автоматическая авторизация на сайте с помощью CURL

Парсинг сайтов

Сейчас мы с вами научимся работать с сессиями и куками, а также выполнять автоматическую авторизацию на сайтах.

Перед изучением данного урока изучите работу с сессиями и куками в PHP.

Отправка куки на сервер

Предположим у вас уже есть название куки и ее значение. В этом случае ее можно отправить на сервер с помощью опции CURLOPT_COOKIE.

Давайте установим куку с именем name и значением ‘Дима’:

Несколько куки разделяются точкой с запятой с последующим пробелом, например, ‘name=Дима; login=admin’.

Автоматическая запись и получение кук

Уже имеющиеся куки, это хорошо, но бывает очень редко. Чаще всего нам нужно автоматически принимать и отправлять куки. Это делается с помощью двух опций: CURLOPT_COOKIEFILE командует принимать и сохранять куки в файл, а CURLOPT_COOKIEJAR командует отправлять сохраненные куки на сервер:

Параметром эти опции принимают путь к файлу в который будут писаться куки.

Учтите нюанс: автоматическая отправка куки CURLOPT_COOKIEJAR работает только при включенной опции CURLOPT_COOKIEFILE.

Работа с сессией

Зачем нам нужно уметь работать с сессиями через CURL? Затем, что авторизация на сайтах реализуется с помощью сессий. Соответственно, умея работать с сессиями, можно реализовать автоматическую авторизацию и парсить контент, доступный только авторизованному пользователю.

Сессии в PHP работают на основе кук. При старте сессии в куку пишется переменная sessionid, которая будет иметь что-то вроде такого значения 27za9c2lel3tk4zhhm7lmtzt6bbm3atj. Поэтому, для работы сессий всего лишь необходимо получать и отправлять куки на сайт, что мы и разобрали чуть выше.

Автоматическая авторизация

Допустим, вы хотите парсить страницы, доступные только авторизованному пользователю.

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

Учтите только, что сессия живет около 20 минут, если не обращаться к сайту. То есть, если после последнего обращения к сайту пройдет больше времени, то нужно авторизовываться заново.

Работа с заголовками

CURLOPT_REFERER //curl_setopt($curl, CURLOPT_USERAGENT, ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)’);//представляемся CURLOPT_HTTPHEADER Массив устанавливаемых HTTP-заголовков, в формате [‘Content-type: text/plain’, ‘Content-length: 100’]

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Источник

Впечатления

Свежие впечатления от фильмов, от программ, от работы, от учебы и от жизни.

19.07.2008

Curl. POST-запросы из PHP с учетом cookies

34 комментария:

Чтобы уж совсем автоматизировать процесс, можно было отказаться от файла cookie.txt и перехватывать заголовки от сервера, например, так:
curl_setopt($ch, CURLOPT_HEADERFUNCTION, ‘setCookies’), а в setCookies обрабатывать строки с «Set-Cookie:».

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Мне нужно брать кукисы из Firefox-a, чтобы каждый раз не вводить их вручную, у него они вроде хранятся в Sql-lite базе, но мне пока было лень разбираться.

Надеюсь, что правильно понял и ответил на вопрос. Брать куки из базы Firefox (или где он их будет хранить) не нужно, они уже есть в приходящих хедерах.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Залогинится через форму тоже можно, только опять же нужно устанавливать возвращенные куки.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

ну вот залогиниться по форме, а конкретнее на torrents.ru у меня не получилось, поэтому приходиться извращаться с куками из файрфокса

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Все это радостно работает если установлена библиотека curl в php. а если нет?

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Ну мне это актуально для автоматизации своих действий, а никакой проблемы дома поставить curl нет

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Curl штука хорошая, но я так и не смог пройти авторизацию на майспейсе 🙁
Антиспам?

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

да я и на torrents.ru не смог. Видимо там что-то хитрое антиспамовое действительно..

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Pilot34, Стучи в аську 55552552, скажу как авторизовываться.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Capcha, спасибо. Со второго победил авторизацию сам. Правда на Питоне, но это не суть важно. Одного поля в пост запросе не хватало для авторизации.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

У твиттера в документации к АПИ указано, что для использования методов поддерживается базовая HTTP-авторизация. Чтобы узнать, что это такое, там даже ссылка на википедию есть. Так что дерзайте.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

З.Ы. В последнем примере в CURLOPT_POSTDATA:
login_password=#pass#&
login_username=#login#&
cookie_test=1315534629&
redirect=index.php

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

З.З.Ы. Когда отправялется POST’ом, в хедерах есть «Cookie: bb_test=1315534629»

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Вам же это наверняка для брутфорса паролей, так что не скажу 🙂

2 Pilot34. Спешите с выводами 🙂 Я подсказал брату спросить совета в этой ленте, т.к. видел, что здесь люди справились с авторизацией на torrents. Брутфорсить он не собирается. Помогите ему, пожалуйста, если знаете, как решить проблему.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

О дааа! Спасибо 🙂 Расширение помогло:) Оказалось, дело в одном поле 🙂 А в FireBug это поле не показывалось:)

Pilot34 можете помочь с torrents.ru авторизацией на питоне?
Зайдите в icq пжалуйста

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

@strm icq давно нет. Про авторизацию см предыдущий коммент

в брутфорсе паролей, да и вообще в краже аккаунтов не вижу смысла. если уж и есть проблемы с ratio то решаются они на много проще.
мне это нужно для автоматизации скачивания торрентов

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

@strm я про вот этот коммент http://www.pilot34.com/2008/07/curl-post-php-cookies.html?showComment=1236893880000#c4154227152783803225

В Питоне все то же самое

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

ОТ Yandex не хочет принимать куки. Странно

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

вот нагуглил http://www.sitepoint.com/forums/showthread.php?590248-Getting-response-header-in-PHP-cURL-request, это не оно?

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

блядь, ну вы и лошары!
отсылайте POST запросом логин и пароль, и сохраняйте куки в файл.
При последующих запросах юзайте его.
Каие поля заполнять, можно фаербагом посмотреть

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

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

Источник

Авторизация на сайте при помощи curl php

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизацияПродолжая цикл статей посвященный парсерам и всем, что с ними связано. В этой статье расскажу про то, как легко можно авторизоваться на любом сайте при помощи библиотеку cUrl php. Для примера я взял один Украинский портал, к которому я собственно и буду подбирать ключики. Для работы нам также понадобится библиотека simple_html_dom

Для начала зарегистрируйтесь на сайте, чтобы иметь тестовые логин-пароль для входа на сайт.

На сайте мы видим ничем не примечательную форму авторизации.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

«Внутренности» у нее тоже ничем не примечательны

Итак смотрим, что форма авторизации отправляет при аутентификации. Для этого возпользуемся Google Chrome, открываем в нем сайт, затем Инструменты->Инструменты разработчика. Далее переходим на вкладку Network. Для браузера Opera Меню->Страница->Средства Разработки->Open Opera DragOnFly и вкладка Сеть. Хоть я и фанат Оперы, но на мой взгляд продукт от компании Google немного удобнее. Я конечно не про браузер =)

Теперь авторизуемся на сайте, смотрим, что посылает форма при сабмите.

php curl cookie авторизация. Смотреть фото php curl cookie авторизация. Смотреть картинку php curl cookie авторизация. Картинка про php curl cookie авторизация. Фото php curl cookie авторизация

Видим, что форма посылает следующие параметры

Попробуем решить задачу в лоб и отправить эти данные простым массивом. Сразу учтем, что данные отправляются на защищенный ssl url, по протоколу https. Это следует учитывать при отправке данных в cUrl. Рассказывать, как работает SSL в рамках данной статьи я не стану, скажу лишь, что сертификаты, которыми обмениваются две стороны, сами по себе ничего не говорят о его обладателе. Они нужны лишь для того, чтобы передать открытый ключ, обеих сторон и служат для шифрования канала связи. Т.е. мы можем проверять наличие ssl, и подключать сертификат в cUrl, но это будет служить пользу только нам, сервер не может узнать пользуемся ли мы сертификатом, или используем незащищенный канал связи.

Источник

cURL в PHP: примеры POST, GET запросов с headers, cookie, JSON и многопоточностью

В этой статье мы рассмотрим эффективные приемы работы с cURL, отправление POST, GET и т.д. запросов, работу с cookie, заголовки, JSON а также в конце статьи будут некоторые полезные инструменты, которые могут значительно облегчить вам работу с HTTP запросами.

GET запрос при помощи cURL

Для того, чтобы отправить запрос, нужно создать объект при помощи функции curl_init(), а затем следует настроить его.

Все настройки, которые вы можете найти по этой ссылке. Там вы найдете опции, которые мы будем устанавливать функцией curl_setopt, в дальнейших примерах.

Пример простого GET запроса при помощи cURL:

Если в результате сервер вернет нам редирект, то мы по нему автоматически не перейдем. А иногда это бывает полезно. Чтобы cURL автоматически шел по редиректу нужно установить опцию CURLOPT_FOLLOWLOCATION.

С установленной опцией скрипт автоматически перейдет по вернувшемуся редиректу и вернет ответ уже с итоговой страницы.

POST запрос при помощи cURL

Теперь давайте отправим post запрос на адрес https://httpbin.org/anything

Отлично, с GET и POST запросами в cURL мы немного освоились. Теперь разберемся с заголовками, которые мы можем отсылать в запросе.

Заголовки устанавливаются при помощи опции CURLOPT_HTTPHEADER Чтобы получше узнать, для чего нужна эта опция давайте попробуем отправить POST запрос в формате JSON

cURL: POST запрос в формате JSON

Отличия конфигурации JSON запроса от обычного POST запроса заключается в том, что мы кодируем поля при помощи json_encode() И добавляем заголовок Content-Type: application/json

cURL: GET запрос в формате JSON

GET запрос в формате JSON отправляется так же как и POST запрос, просто нужно CURLOPT_CUSTOMREQUEST установить в ‘GET’

cURL и другие виды HTTP запросов: PUT, DELETE, HEAD, PATCH, OPTIONS, CONNECT и т.д.

Стоп, Дмитрий, прекрати выдумывать виды запросов!

Ничего я не выдумываю: HTTP протокол предполагает множество типов HTTP запросов просто POST и GET являются более распространенными.

Чтобы отправить PUT запрос, нужно установить опцию CURLOPT_PUT таким образом:

Это делается по тому же принципу, как и CURLOPT_POST. Но что делать с остальным зоопарком запросов? Разве у cURL есть CURLOPT_DELETE или CURLOPT_HEAD? Нет.

Для того, чтобы отправлять другие виды запросов есть другая опция: CURLOPT_CUSTOMREQUEST

Вместо строки curl_setopt($curl, CURLOPT_POST, true); мы явно задаем имя запроса опцией CURLOPT_CUSTOMREQUEST:

Замечание: Не используйте эту возможность пока не убедитесь, что сервер поддерживает данный тип запроса.

Как получить заголовки ответа

В предыдущем примере мы научились посылать заголовки. Самый правильный способ принять заголовки:

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

Рассмотрим такой пример:

Мы сначала определяем размер заголовка, с помощью CURLINFO_HEADER_SIZE затем вырезаем его из ответа. К сожалению, это может не срабатывать, когда используется прокси или в некоторых случаях редиректа.

Скачивание больших файлов с помощью cURL

Для того, чтобы скачать большой файл пригодится этот способ:

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

Здесь мы скачиваем файл при помощи cURL в оперативную память, а затем сохраняем его на диск. Не смотря на то, что этот способ не годится для скачивания больших файлов, с помощью него можно вполне сохранить простую веб страницу.

Параллельные cURL запросы в PHP

Для чего могут потребоваться многопоточные запросы? Например у нас есть много URL адресов:

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

Как выполнить 3 запроса одновременно? В этом нам поможет curl_multi_

Давайте решим конкретную задачу при помощи параллельных curl запросов. Нам нужно отправить одновременно 3 запроса.

Такие параллельные запросы выполняются значительно быстрее чем поочередные.

cURL запросы с сохранением и загрузкой cookie из файла

cURL позволяет нам установить cookie при передачи запросов, а также автоматически принимать и устанавливать cookie, которые нам возвращает сервер, сохраняя их между запросами.

Давайте рассмотрим такой пример:

Теперь cookie у нас хранятся в файле cookie.txt в директории со скриптом (если вы ничего не меняли). Если мы совершаем повторные запросы, то cURL автоматически берет и отправляет cookie на сервер, как и обычный браузер. Таким образом мы можем авторизироваться на сайте и сохранить сеанс между запросами.

Передача cookie без файлов

Иммитация браузера с помощью cURL

Иногда сайт, к которому мы обращаемся может фильтровать запросы, защищаясь от парсинга. Если для этого используются упрощенные способы защиты, например проверка User-Agent, то мы можем легко притвориться, что являемся реальным польователем, который взаимодействует с сайтом через браузер, мы можем послать заголовки и cookie, которые обычно посылает браузер.

В данном примере установлены заголовки, которые посылает Chrome.

В простых ситуациях этого хватает. Но если используется защита при помощи javascript или что-то более продвинутое, то здесь cURL бессилен, и следует использовать либо BAS либо Zennoposter. Либо если вы хотите попытать счастье с PHP, то Selenium.

Не используйте эти знания в противоправных целях.

cURL запросы через прокси

Простой пример для отправки запросов через proxy. Если ваш прокси предполагает авторизацию, то раскомментируйте соответствующие строчки.

Отправка файлов

Авторизация с помощью cURL

HTTP Авторизация

Чтобы с помощью cURL авторизироваться на сайте, который использует Basic HTTP-аутентификацию нужно установить опцию CURLOPT_USERPWD, в которой будет наш логин и пароль.

OAuth авторизация

Авторизация через форму

Давайте применим полученные нами знания и авторизируемся на каком-нибудь сайте. Для этого нужно посмотреть куда форма отправляет данные и отправить туда то же самое.

Допустим на сайте есть такая форма:

Тогда наш cURL запрос должен быть сформирован так:

Автоматическое построение запросов

Перевод консольной команды curl в PHP

И вот еще один сервис, который переводит консольную команду curl в PHP: https://incarnate.github.io/curl-to-php/

Так вы можете создать простые запросы на cURL в PHP не создавая их вручную.

Лайфхак

В консоли браузера, во вкладке сеть, вы можете кликнуть правой кнопкой мыши и скопировать любой запрос в виде команды cURL, а потом с помощью сервиса curl-to-php перевести запрос в PHP. Теперь вы вообще можете сконвертировать в cURL абсолютно любой запрос, который посылает ваш браузер.

Как работать с cURL гораздо проще

Вы можете спросить: почему у cURL такие кривые и страшные методы? У вас может возникнуть желание взять и создать обертку для работы с cURL, чтобы вы могли не писать каждый раз большие куски некрасивого кода, а писать все проще, например так:

К счастью, такая обертка уже написана и найти ее можно здесь: https://github.com/php-curl-class/php-curl-class

Просто установите ее при помощи: composer require php-curl-class/php-curl-class и не работайте с кривыми кусками кода, которые таковы вероятно потому, что cURL изначально консольное приложение.

POST и GET запросы без cURL

С помощью PHP мы можем отправить простой GET запрос используя функцию file_get_contents.

При помощи file_get_contents мы также можем отправить POST запрос.

Подробнее о том, какие опции можно передавать в stream_context_create, вы можете изучить здесь: http://docs.php.net/manual/ru/context.http.php

Другие инструменты для работы с запросами в PHP

Для работы с запросами есть еще более мощный инструмент: Guzzle

Несколько примеров на Guzzle

GET запросы на Guzzle

Разные типы запросов на Guzzle

Асинхронные запросы на Guzzle

Если интересно, то читайте: Guzzle Quick Start

Пишите комментарии, если что-то осталось не понятно.

Источник

Почему не происходит авторизации через cURL PHP?

string(1250) «HTTP/1.1 100 Continue

HTTP/1.1 302 Found
Cache-Control: private, no-cache, no-store, must-revalidate, post-check=0, pre-check=0
Content-Type: text/plain; charset=utf-8
Date: Mon, 25 Sep 2017 07:56:52 GMT
Location: https://peek-cloppenburg.at/myaccount/
Set-Cookie: did=s%3ASPbkJ0vYD54giVFaO4BJ3V2MlVEweFN4.3GdSOWSBy8lgNi%2F86fp1LsDFVZ1RdIIrEKP2HvBtrMM; Max-Age=94608000; Domain=.peek-cloppenburg.at; Path=/; Expires=Thu, 24 Sep 2020 07:56:52 GMT; Secure
Vary: User-Agent, Accept, Accept-Encoding
X-Content-Type-Options: nosniff
x-request-id: e6c38de3-6bdd-45cd-bcd5-dcec76e50f2e
X-XSS-Protection: 1; mode=block
Content-Length: 60
Connection: keep-alive
Set-Cookie: visid_incap_753894=BrccN5aESViJiMVck3oh+MK2yFkAAAAAQUIPAAAAAAAmF6l21PqCtLNLV7Zh3EXC; expires=Mon, 24 Sep 2018 14:48:23 GMT; path=/; Domain=.peek-cloppenburg.at
Set-Cookie: nlbi_753894=4MCJRROblklNOncEtErIoQAAAAAXTJ6UfLbgFycyWeuQ0jpS; path=/; Domain=.peek-cloppenburg.at
Set-Cookie: incap_ses_800_753894=ZuNdQsceikE6xTlGxSsaC8O2yFkAAAAAT4xzB85uMYfe3HxbOLKgJw==; path=/; Domain=.peek-cloppenburg.at
X-Iinfo: 9-11749772-11749775 NNNN CT(70 145 0) RT(1506326211175 57) q(0 0 2 0) r(3 3) U6
X-CDN: Incapsula

Что вроде кажется все впорядке, я могу зайти на страницу, скажем, личного кабинета. Итак, код:

HTTP/1.1 301 Moved Permanently
Location: https://www.peek-cloppenburg.at/myaccount/
Content-Length: 0
Connection: close

Что означает. что все прошло неуспешно, он редиректит меня на страницу авторизации.

Мне не понятно, почему так просиходит и что я делаю не так.

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

Пожалуйста, объясните мне что не так. Что я не правильно делаю?
Как авторизоваться и выполнять действия в личном кабинете сата через cURL?

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *