Get headers with curl php

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

cURL — это программное обеспечение, которое позволяет выполнять запросы разных типов или протоколов. И как раз cURL помогает нам писать боты и парcеры на PHP, автоматизируя шаблонные HTTP-запросы, и собирая большое количество данных автоматизировано. PHP имеет встроенные инструменты по удобной работе с cURL.

PHP cURL основы

curl_init(); // инициализирует сессию работы с cURL curl_setopt(. ); // изменяет поведение cURL-сессии, в соответствии с переданными опциями curl_exec(); // выполняет cURL запрос по сконфигурированной сессии, и возвращает результат curl_close(); // закрывает сессию cURL и удаляет переменную, которой присвоен curl_init();
  • curl_init ([ string $url = NULL ] ) — с него начинается инициализация сессии cURL
  • curl_setopt ( resource $ch , int $option , mixed $value ) — конфигурирование настроек текущей сессии cURL
  • curl_exec ( resource $ch ) — выполняем запрос, получаем результат
  • curl_close ( resource $ch ) — закрытие сессии. В реальности, можно игнорировать выполнение curl_close(), так как PHP сделает это за нас, после выполнения скрипта

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

Здесь всё просто, PHP cURL GET запрос — это самое простое, что можно придумать.

// URL страницы, которую открываем $url = 'https://orkhanalyshov.com'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch);

В результате выполнения этого кода, переменной $response будет присвоен ответ от сервера, к которому мы стучались (в основном — это HTML или JSON).

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

$queryParams = [ 'category' => 14, 'page' => 2, ]; $url = 'https://alishoff.com/?' . http_build_query($queryParams); echo $url; // https://alishoff.com/?category=14&page=2

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

Читайте также:  Data science with python and dask

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

// данные POST-запроса $data = [ 'name' => 'John', 'email' => 'john@doe.com', 'body' => 'Hello, World!', 'verifyCode' => 'cugifu', ]; // url, на который отправляет данные $url = 'https://alishoff.com/contact'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $response = curl_exec($ch); curl_close($ch); var_dump($response);

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

Для того, чтобы передать дополнительные, собственные заголовки, нужно с помощью функции curl_setopt() задать опцию CURLOPT_HTTPHEADER, передав массив заголовков в формате Name: Header value:

curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Custom-Header-1: The-Header-Value-1', 'Custom-Header-2: The-Header-Value-2' ]);

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

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

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

$data = [ 'site' => 'https://orkhanalyshov.com', 'action' => 'notify', 'email' => 'john@doe.com', ]; $dataString = json_encode($data); $url = 'http://localhost/handler.php'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($dataString) ]); $result = curl_exec($ch); curl_close($ch);

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

Читайте также:  Window functions in python

Источник

Retrieve response headers from PHP cURL

There are two ways to get response headres from PHP cURL.

1. Using CURLOPT_HEADER option

With the curl_setopt() method, when CURLOPT_HEADER is set to true, curl_exec will output response header. At this time, if CURLOPT_NOBODY is set to false, curl_setopt() will return the response header and content body, otherwise only the response header will be returned.

We can use curl_getinfo($ch, CURLINFO_HEADER_SIZE) method to return total size of all headers received.

$url = "https://www.google.com"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); // TRUE to exclude the body from the output. curl_setopt($ch, CURLOPT_NOBODY, 0); $response = curl_exec($ch); // After curl_exec $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($response, 0, $header_size); $body = substr($response, $header_size); echo $header; // echo $body;
HTTP/1.1 200 OK Date: Tue, 28 Apr 2020 15:11:27 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Set-Cookie: 1P_JAR=2020-04-28-15; expires=Thu, 28-May-2020 15:11:27 GMT; path=/; domain=.google.com; Secure Set-Cookie: NID=203=DasuCttFxUVDirSokzwSf91r3PD60lDxlFogt2-rg5m0BCbhSeCpWcIlJVAmuLiDUkXmBTXuVbKEcP8gT0ifJzTu1MW-9UfriAyIqPESXl2H6fOsb9mvDZH8ng4Nb_YQk4Xv1uMFpCMiVf6GSHZS7dje2cjq1qvgyFiQfb3bOTA; expires=Wed, 28-Oct-2020 15:11:27 GMT; path=/; domain=.google.com; HttpOnly Alt-Svc: quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000 Accept-Ranges: none Vary: Accept-Encoding Transfer-Encoding: chunked

2. Using CURLOPT_HEADERFUNCTION option

With the CURLOPT_HEADERFUNCTION option, we can set a callback function.

$headers = []; $url = "https://www.google.com"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($curl, $header) use (&$headers)  $len = strlen($header); $header = explode(':', $header, 2); if (count($header)  2) // ignore invalid headers return $len; $headers[strtolower(trim($header[0]))][] = trim($header[1]); return $len; > ); $response = curl_exec($ch); print_r($headers);
Array ( [date] => Array ( [0] => Tue, 28 Apr 2020 15:12:50 GMT ) [expires] => Array ( [0] => -1 ) [cache-control] => Array ( [0] => private, max-age=0 ) [content-type] => Array ( [0] => text/html; charset=ISO-8859-1 ) [p3p] => Array ( [0] => CP="This is not a P3P policy! See g.co/p3phelp for more info." ) [server] => Array ( [0] => gws ) [x-xss-protection] => Array ( [0] => 0 ) [x-frame-options] => Array ( [0] => SAMEORIGIN ) [set-cookie] => Array ( [0] => 1P_JAR=2020-04-28-15; expires=Thu, 28-May-2020 15:12:50 GMT; path=/; domain=.google.com; Secure [1] => NID=203=ZC5X9W1OFIFk7p_y1HUQ1ZhluIAq1QMJcoiaWNvjtggga9w0By1ULn01BaSxfswmYixQ8arShOwTpHMWyDRXu6vy5xdS19FmFYLyUsdz0n5wOs9_dkb4xBPLOc4SRKdZN7QhcgS8sMVwugrM-CEyg2ENJq_t__UJlwM2cgOdyfg; expires=Wed, 28-Oct-2020 15:12:50 GMT; path=/; domain=.google.com; HttpOnly ) [alt-svc] => Array ( [0] => quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000 ) [accept-ranges] => Array ( [0] => none ) [vary] => Array ( [0] => Accept-Encoding ) [transfer-encoding] => Array ( [0] => chunked ) )

Источник

Php cUrl как вывести возвращаемые заголовки?

После curl_setopt($ch, CURLOPT_HEADER, true) при curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) HTTP-header возвращается в теле ответа $html = curl_exec($ch) . Вот оттуда его и доставайте через

$html = curl_exec($ch); if ($html !== false)

Stimulate

masha_0212

Stimulate

masha_0212

curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "name:password"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4"); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_HEADER, true); //curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); // возможно curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 200); $result = json_decode(curl_exec($ch), true); $code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); $new_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

Compolomus

Источник

Оцените статью