php curl авторизация на сайте
Автоматическая авторизация на сайте с помощью 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’]
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
Авторизация на сайте при помощи curl php
Продолжая цикл статей посвященный парсерам и всем, что с ними связано. В этой статье расскажу про то, как легко можно авторизоваться на любом сайте при помощи библиотеку cUrl php. Для примера я взял один Украинский портал, к которому я собственно и буду подбирать ключики. Для работы нам также понадобится библиотека simple_html_dom
Для начала зарегистрируйтесь на сайте, чтобы иметь тестовые логин-пароль для входа на сайт.
На сайте мы видим ничем не примечательную форму авторизации.
«Внутренности» у нее тоже ничем не примечательны
Итак смотрим, что форма авторизации отправляет при аутентификации. Для этого возпользуемся Google Chrome, открываем в нем сайт, затем Инструменты->Инструменты разработчика. Далее переходим на вкладку Network. Для браузера Opera Меню->Страница->Средства Разработки->Open Opera DragOnFly и вкладка Сеть. Хоть я и фанат Оперы, но на мой взгляд продукт от компании Google немного удобнее. Я конечно не про браузер =)
Теперь авторизуемся на сайте, смотрим, что посылает форма при сабмите.
Видим, что форма посылает следующие параметры
Попробуем решить задачу в лоб и отправить эти данные простым массивом. Сразу учтем, что данные отправляются на защищенный ssl url, по протоколу https. Это следует учитывать при отправке данных в cUrl. Рассказывать, как работает SSL в рамках данной статьи я не стану, скажу лишь, что сертификаты, которыми обмениваются две стороны, сами по себе ничего не говорят о его обладателе. Они нужны лишь для того, чтобы передать открытый ключ, обеих сторон и служат для шифрования канала связи. Т.е. мы можем проверять наличие ssl, и подключать сертификат в cUrl, но это будет служить пользу только нам, сервер не может узнать пользуемся ли мы сертификатом, или используем незащищенный канал связи.
How to set the authorization header using cURL
How do I pass authorization header using cURL? ( executable in /usr/bin/curl ).
11 Answers 11
See part 6. HTTP Authentication
HTTP Authentication is the ability to tell the server your username and password so that it can verify that you’re allowed to do the request you’re doing. The Basic authentication used in HTTP (which is the type curl uses by default) is plain text based, which means it sends username and password only slightly obfuscated, but still fully readable by anyone that sniffs on the network between you and the remote server.
To tell curl to use a user and password for authentication:
Sometimes your HTTP access is only available through the use of a HTTP proxy. This seems to be especially common at various companies. A HTTP proxy may require its own user and password to allow the client to get through to the Internet. To specify those with curl, run something like:
If you use any one these user+password options but leave out the password part, curl will prompt for the password interactively.
Do note that when a program is run, its parameters might be possible to see when listing the running processes of the system. Thus, other users may be able to watch your passwords if you pass them as plain command line options. There are ways to circumvent this.
It is worth noting that while this is how HTTP Authentication works, very many web sites will not use this concept when they provide logins etc. See the Web Login chapter further below for more details on that.
Как установить заголовок авторизации с помощью curl
Как передать заголовок авторизации с помощью cURL? (исполняемый файл в /usr/bin/curl ).
8 ответов
см. раздел 6. Аутентификация HTTP
аутентификация HTTP-это возможность сообщить серверу свое имя пользователя и пароль, чтобы он мог подтвердить, что вам разрешено выполнять запрос, который вы делающий. Базовая аутентификация, используемая в HTTP (который является типом, используемым curl по умолчанию)простые текст, что означает, что он отправляет имя пользователя и пароль только слегка запутанный, но все еще полностью читаемый любым, кто нюхает сеть между вами и удаленным сервером.
чтобы сказать curl использовать пользователя и пароль для аутентификации:
Иногда ваш HTTP-доступ доступен только через использование HTTP полномочие. Это, по-видимому, особенно распространено в различных компаниях. Прокси HTTP может потребоваться собственный пользователь и пароль, чтобы позволить клиенту интернет. Чтобы указать те, с завитком, запустите что-то вроде:
Если вы используете любой из этих параметров user + password, но оставляете пароль часть, curl запросит пароль в интерактивном режиме.
обратите внимание, что при запуске программы ее параметры могут быть видны при перечислении запущенных процессов системы. Таким образом, другие пользователи могут быть возможность просмотра паролей, Если вы передаете их как обычную командную строку опции. Есть способы обойти это.
стоит отметить, что пока это так HTTP Аутентификация работает, очень многие веб-сайты не будут использовать эту концепцию, когда они дают логины и т. д. Видеть более подробная информация об этом приведена ниже в разделе веб-входа.
How do I make a request using HTTP basic authentication with PHP curl?
I’m building a REST web service client in PHP and at the moment I’m using curl to make requests to the service.
How do I use curl to make authenticated (http basic) requests? Do I have to add the headers myself?
11 Answers 11
Zend has a REST client and zend_http_client and I’m sure PEAR has some sort of wrapper. But its easy enough to do on your own.
So the entire request might look something like this:
CURLOPT_USERPWD basically sends the base64 of the user:password string with http header like below:
So apart from the CURLOPT_USERPWD you can also use the HTTP-Request header option as well like below with other headers:
The most simple and native way it’s to use CURL directly.
You just need to specify CURLOPT_HTTPAUTH and CURLOPT_USERPWD options:
Unlike SOAP, REST isn’t a standardized protocol so it’s a bit difficult to have a «REST Client». However, since most RESTful services use HTTP as their underlying protocol, you should be able to use any HTTP library. In addition to cURL, PHP has these via PEAR:
A sample of how they do HTTP Basic Auth
The also support Digest Auth
If the authorization type is Basic auth and data posted is json then do like this
Other way with Basic method is:
For those who don’t want to use curl:
Yahoo has a tutorial on making calls to their REST services using PHP:
I have not used it myself, but Yahoo is Yahoo and should guarantee for at least some level of quality. They don’t seem to cover PUT and DELETE requests, though.
Also, the User Contributed Notes to curl_exec() and others contain lots of good information.