php 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 на примерах

Разберем доступные типы сURL (расшифровывается как Client URL) запросов на PHP с примерами. Через cURL запросы вы можете передать или получить данные и файлы по протоколам HTTP, FTP, HTTPS, взаимодействуя с другим доменом на удаленном сервере в рамках текущей сессии выполнения PHP скрипта. Запросы cURL в PHP возвращают данные в виде XML, JSON или непосредственно в HTML.

Сначала cURL создавался исключительно для командной строки, но позже разработчиками PHP была написана библиотека, что значительно упростило использование этого инструмента PHP программистами.

Самое распространенное применение таких запросов в PHP — это парсинг страниц сторонних веб-ресурсов, взаимодействие с API других сайтов и так далее. В принципе, получить данные страницы на удаленном сервере можно с помощью функций file_get_contents(), file() или readfile(), но это весь функционал, который они могут дать.

Для того, чтобы построить более сложное взаимодействие, например:

— необходимо использовать Client URL.

Итак, как правильно построить cUrl запрос и какие есть типы запросов разберем далее.

Отправка cURL запроса PHP

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

Формирование cURL запроса состоит из четырех этапов:

Итак, как это должно выглядеть в коде:

Этапы 1,3 и 4 типовые для всех типов запросов. А на этапе 2, в зависимости от указанных параметров, как раз и формируется тот или иной тип запроса.

Получение информации о запросе cUrl

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

Чтобы получить исчерпывающую информацию о самом запросе используется функция curl_getinfo(). Главным образом эта информация полезна для отладки работы скрипта, в котором выполняются cURL запросы.

Функция возвращает данные в виде массива со следующими ключами:

GET запросы cUrl в PHP

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

Или можно использовать аналог через функцию file_get_contents():

POST запросы cUrl в PHP

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

Функция file_get_contents() так же умеет отправлять POST запросы. Для этого нужно использовать заголовки:

Мульти запросы cURL в PHP

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

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

Одной из самых важных особенностью cURL в PHP является возможность осуществлять несколько асинхронных запросов одновременно.

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

Эта особенность позволяет оптимизировать работу скрипта и сократить время его выполнения.

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

Отправка файлов на другой сервер используя cURL

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

Есть несколько вариантов передачи файлов между серверами.

Методом POST

Таким образом можно отправить один или несколько файлов сразу:

Методом PUT

Методом FTP

Не смотря на то, что в PHP есть библиотека для работы с FTP, все же cURL также позволяет работать по этому протоколу напрямую.

Скачивание файлов

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

При передаче указателя на открытый файл в параметре CURLOPT_FILE результат выполнения скрипта записывается сразу в файл.

DELETE запрос для удаления файла

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

Чтобы удалить файл через cURL запрос используется HTTP-метод DELETE:

Запрос через proxy

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

Когда нужно сделать запрос, подменив при этом источник запроса на промежуточный адрес, то используйте опцию PROXY:

Отправить и получить cookie

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

Для сохранения куки в файле необходимо указать путь к этому файлу в соответствующих параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.

Параметр CURLOPT_COOKIE используется для принудительной передачи значения куки:

Имитация браузера через запросы cURL в PHP

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

Многие сайты защищаются от парсинга, отслеживая данные переменных user agent, referer, cookie. На сервере проверяются эти данные и, если подозрений на парсинг нет, то возвращается страница сайта.

Так как запросы curl в php данные этих переменных не передают, то такая защита от парсинга сайта вернет ошибку 404 или 500. Чтобы этого не происходило, можно сымитировать запрос страницы из браузера, добавив, например, следующие заголовки:

Можно посмотреть через панель для разработчиков заголовки, которые передает браузер при обращение к страницам сайтов и использовать их для запроса cURL в PHP.

HTTP авторизация через запросы cURL в PHP

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

Basic Authorization

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

Если на сайте реализована работа с OAuth протоколом авторизации, который позволяет
выдать права на действия, которые сам сайт сможет производить на другом ресурсе от
лица, авторизовавшегося и давшего это разрешение, пользователя, тогда запрос cURL в php будет выглядеть следующим образом:

Получить HTTP код ответа сервера

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

Если требуется прощупать доступность сайта или его отдельной страницы, то можно воспользоваться функцией curl_getinfo с параметром CURLINFO_HTTP_CODE:

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

Источник

curl_getinfo

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

curl_getinfo — Возвращает информацию об определённой операции

Описание

Возвращает информацию о последней операции.

Список параметров

Возвращаемые значения

Список изменений

Примеры

Пример #1 Пример использования curl_getinfo()

// Создаём дескриптор cURL
$ch = curl_init ( ‘http://www.example.com/’ );

Пример #2 Пример использования curl_getinfo() с параметром option

// Создаём дескриптор cURL
$ch = curl_init ( ‘http://www.example.com/’ );

Примечания

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

User Contributed Notes 13 notes

Here are the response codes ready for pasting in an ini-style file. Can be used to provide more descriptive message, corresponding to ‘http_code’ index of the arrray returned by curl_getinfo().
These are taken from the W3 consortium HTTP/1.1: Status Code Definitions, found at
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

[Informational 1xx]
100=»Continue»
101=»Switching Protocols»

[Successful 2xx]
200=»OK»
201=»Created»
202=»Accepted»
203=»Non-Authoritative Information»
204=»No Content»
205=»Reset Content»
206=»Partial Content»

[Redirection 3xx]
300=»Multiple Choices»
301=»Moved Permanently»
302=»Found»
303=»See Other»
304=»Not Modified»
305=»Use Proxy»
306=»(Unused)»
307=»Temporary Redirect»

[Client Error 4xx]
400=»Bad Request»
401=»Unauthorized»
402=»Payment Required»
403=»Forbidden»
404=»Not Found»
405=»Method Not Allowed»
406=»Not Acceptable»
407=»Proxy Authentication Required»
408=»Request Timeout»
409=»Conflict»
410=»Gone»
411=»Length Required»
412=»Precondition Failed»
413=»Request Entity Too Large»
414=»Request-URI Too Long»
415=»Unsupported Media Type»
416=»Requested Range Not Satisfiable»
417=»Expectation Failed»

[Server Error 5xx]
500=»Internal Server Error»
501=»Not Implemented»
502=»Bad Gateway»
503=»Service Unavailable»
504=»Gateway Timeout»
505=»HTTP Version Not Supported»

Источник

Базовая работа с PHP CURL: GET, POST, JSON, Headers

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

PHP cURL основы

Отправка GET запроса из PHP cURL

Иногда стоит необходимость отправки GET-запроса, формируя URL-адрес из Query-параметров. Для таких случаев, можете воспользоваться встроенной PHP-функцией, формирующей URL-строку с параметрами из массива:

Теперь вы знаете, как склеить массив данных в URL из PHP.

Отправка POST запроса из PHP cURL

PHP cURL POST запрос обычно не выполняется с пустым телом. Запрос этого типа считается запросом на добавление данных (создание новой сущности в БД, к примеру) и обычно нам необходимо передавать серверу набор каких-то данных. Код отправки POST-запроса с передачей данных будет выглядеть так:

Отправка cURL запроса из PHP с собственными заголовками (PHP cURL Headers)

Отправка POST JSON запроса в PHP cURL

Очень часто, при написании ботов, имитирующих взаимодействие с API, приходится отправлять данные на целевой сервер в формате JSON. И так сложилось, что отправка Form-Data POST параметров отличается от алгоритма отправки JSON данных, потому, и передавать эти данные для cURL нужно по-другому.

Для того, чтобы корректно передать данные в формате JSON через PHP cURL, необходимо исходный массив с параметрами, перекодировать в JSON вручную, и заполнить этими данными тело (body) запроса. А так же, чтобы сервер понял, что это данные в формате JSON, нужно передать соответствующие HTTP-заголовки (о которых мы говорили выше).

Основной принцип передачи данных в JSON с помощью CURL заключается в том, что нужно выполнить POST запрос, тело которого заполнить закодированными в JSON данными, после чего, указать соответствующий заголовок позволяющий серверу понять, что ему на обработку пришли JSON данные.

Резюме

Работа всех этих опций, их работа и настройка подробно рассказано в этой статье. А так же, на закрепление этого материала, в следующей статье был изложен алгоритм написания ботов на PHP, советую почитать, и попробовать написать собственного бота, чтобы полноценно разобраться в этой теме. Эта статья охватывает большинство важных тем: отправка POST-запросов, обработка ответов, имитация браузера из PHP.

Subscribe to Блог php программиста: статьи по PHP, JavaScript, MySql

Get the latest posts delivered right to your inbox

Источник

Урок 20. Работа с cURL в PHP

В этой статье речь пойдет о таком мощном инструменте как cURL, а также о библиотеке для php, которая предоставляет доступ к этому инструменту — libcurl. Для чего все это нужно? Для связи с сервером по протоколам передачи данных, например, http или ftp. Остальные протоколы нам не особо интересны, если кто-то хочет углубляться в эту тему, то придется уже копать англоязычные ресурсы, а в этой статье будут основы и примеры использования.

Что вообще такое cURL и libcurl? Общие моменты

Итак, библиотека libcurl предоставляет нам возможность передачи данных на сервер, и получения ответов от него. Что нам это дает? Возможность эмуляции поведения пользователя или браузера! Вы можете получать содержимое страниц для последующего парсинга, можете получать заголовки ответов сервиса и программно авторизироваться на сайтах, делать скрипты постинга сообщений (например, в твиттер или на форумах) или грабберы информации. Все ограничивается лишь вашей фантазией!

Установка cURL на Denwer (Денвер). Как начать пользоваться libcurl?

Первое, что мы должны сделать, это установить библиотеку. На локальном компьютере я пользуюсь сборкой Denwer, как и подавляющее большинство начинающих вебмастеров, на которых и рассчитана статья. Опытные пользователи, которые самостоятельно устанавливают связку php+apache+mysql смогут установить и cURL, не мне объяснять им как это делается 😉 А мы, новички, пользуемся готовыми решениями, чтобы было проще. Поэтому, устанавливаем libcurl следующим образом:

и убираем точку с запятой в начале сроки:

Готово. Чтобы проверить работоспособность библиотеки можете вызвать функцию phpinfo() и найти там строчку: cURL support enabled. Поздравляю с первой победой.

Описание cURL и первые шаги

Для началом работы с инструментом, его нужно инициализировать. Делается это следующим образом:

Мы использовали функцию инициализации сессии cURL. При этом, можно задать URL сразу, вот так:

А можно сделать это потом, в опциях. Порядок установки опций не имеет значения. Делается это другой функцией:

Первый параметр этой функции, то есть resource ch мы уже создали чуть выше, а вот параметров option и value очень много. Я думаю, что не стоит копипастить сюда их все, а достаточно лишь дать ссылку на подробное описание функции, надеюсь никто не обидится: curl_setopt.

Приведу пример установки опций как раз на примере URL:

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

Итак, мы инициализировали сессию, задали нужные нам параметры, теперь выполняем получившийся запрос, закрываем сессию и выводим результат:

В итоге получаем наш первый полностью рабочий пример использования библиотеки libcurl:

Как оно работает, надеюсь, понятно, ведь мы рассмотрели каждый шаг по отдельности 🙂 В результате мы получаем заголовок HTTP ответа от сервера, который чуть ниже обязательно разберем, чтобы лучше понимать все этапы взаимодействия браузера и сервера:

Великолепно! Мы получили заголовок ответа от сервера и опробовали библиотеку в действии. Чем это нам полезно? Тем, что теперь вы примерно представляете себе последовательность действий при работе с cURL:

Двигаемся дальше, но перед тем как делать с libcurl что-то более серьезное, как я и обещал, разберем подробно из чего состоит заголовок HTTP запроса к серверу и ответ на него.

Структура заголовка HTTP запроса

Для примера я обратился к странице ya.ru и в Opera Dragonfly просмотрел сформированный запрос браузера и полученный от сервера ответ. Вот и они:
Запрос
GET / HTTP/1.1 — Пытаемся получить страницу по адресу /, то есть главную, находящуюся в корне папки. Используем протокол версии 1.1.
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14 — Представляемся серверу, мы — браузер Опера.
Host: ya.ru — Доменное имя запрашиваемого ресурса.
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1 — Список допустимых форматов ресурса.
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8 — Список поддерживаемых языков.
Accept-Encoding: gzip, deflate — Поддерживаемые способы кодирования.
Cookie: yandexuid=ХХХХХ — Куки, при необходимости.
Connection: Keep-Alive — Просим не разрывать соединение и оставаться на связи.
Ответ
HTTP/1.1 200 Ok — Получаем ответ с кодом 200, значит все ОК.
Server: nginx — Сервер представился — это nginx.
Date: Sun, 10 Mar 2013 14:10:50 GMT — Текущие дата и время на сервере.
Content-Type: text/html; charset=UTF-8 — Тип контента и кодировка.
Connection: close — Сервер не хочет поддерживать с нами постоянного соединения, поэтому сразу же его закрывает. Для следующего запроса будет установлено новое соединение.
Cache-Control: no-cache,no-store,max-age=0,must-revalidate — Управление кэшированием. В данном случае оно отключено.
Expires: Sun, 10 Mar 2013 14:10:50 GMT — Дата предполагаемого истечения срока действия сессии. В нашем случае оно совпадает с временем открытия, так как сервер тут же его закрыл, сразу после обработки.
Last-Modified: Sun, 10 Mar 2013 14:10:50 GMT — Время последней модификации.
Content-Encoding: gzip — Способ кодирования информации.
Полный список всех параметров, которые можно встретить в заголовке HTTP запроса можно посмотреть на википедии.
Теперь вы примерно представляете как общаются между собой ваш браузер и web-сервер. Это очень полезно знать и понимать, ведь мы будем пытаться эмулировать действия браузера с помощью библиотеки libcurl. Идем дальше.

Пример работы с библиотекой

Я считаю, что после того, как некоторые общие моменты уже ясны и вроде бы все понятно, то самое время переходить к практике и на примере уже оттачивать свое мастерство. Лично у меня всегда сразу руки чешутся все попробовать на практике 🙂

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

Входные параметры:
url — адрес страницы или сайта.
Значения выходных параметров (массив с тремя элементами):
header[‘errno’] — если что-то пошло не так, то тут будет код ошибки.
header[‘errmsg’] — здесь при этом будет текст ошибки.
header[‘content’] — собственно сама страница\файл\картинка и т.д.

Используем функцию, например, так:

Все обрабатывается корректно и красиво 🙂
Дальше с кодом страницы можно делать все что угодно, например, парсить регулярками. Но это все в следующих уроках, а пока что остановимся на этом.

Комментарии:

Можете ли вы сообщить сколько еще уроков вы собираетесь сделать и на какие темы они будут?

Tetsu, буду писать пока будет время 🙂 Есть какие то пожелания?

Не совсем… просто хотелось бы освоить это дело побыстрее, поэтому и интересуюсь какие еще темы мне стоит изучить в продолжение этим.

А на MAC OS X нассали? У меня MAMP, что мне делать?

Автор, спасибо огромное всё сразу стало на свои места в голове:)

Привет
Забыл ты про функцию iconv у меня бяки отобразились
Есть парочка тем если интересно.
1)Чем отличаются echo от print(понимаю что тема затерта в нете но вот подробностей так и не встречал)
Если хочешь я могу тебе написать массу огромную тем по которой не только мне интересно будет, но и публике тоже интересно будет!
И еще вот что еще….Спасибо за урок очень хороший но очень сжат,мне кажется что новичку (совсем начинающему)будет трудновато понять что и как делается.

Большое спасибо. Помог очень))

Всем остальным, кто не дружит с регулярками, хочу посоветовать PHP Simple HTML DOM Parser.
http://habrahabr.ru/post/176635/

проверьте, точно файл сохранен в кодировке UTF-8? В коде страницы присутствует meta-тег content=»text/html; charset=UTF-8″? И в заключении, после всего этого в самом браузере стоит автоопределение кодировки или жестко задана (может там, например, windows-1251)?

Виктория, myblaze дело говорит. Ещё раз повторюсь, если позволите.
1) Чтобы узнать кодировку html документа, нужно посмотреть в сам html документ и обратить внимание на тег
2) Возможно вы пытаетесь вывести эту строку без учёта её кодировки. Советую сохранить в файл и просмотреть через файл эту строку. Возможно в файле всё откроется без кракозябр.
3) Советую скачать текстовый редактор Notepad++. Там в меню есть возможность преобразовать и перекодировать. Поэкспериментируйте. Скопируйте и вставте свои кракозябры и попробуйте преобразовать или перекодировать. После каждой неудачной перекодировки нужно заново открывать файл. Это поможет быстрей разобраться с кодировками.

Jack, кто ищет, тот всегда найдет 😉 А Aleх’у только удачи пожелать можно, может тоже когда-нибудь научится гуглить.

Возникает проблема с Curl, когда сайт находится на сервере http выдается пустой лист, если смотрим смотри ошибки — culdnt connect to host, что делать?

Fatal error: Call to undefined function curl_init()

Источник

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

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