Guzzle — находится в активной разработке и на данный момент явлется трендовым http-клиентом на phph. За прошедший год две старших версии. Версия 4.0.0 вышла в марте 2014, а май 2015 принёс релиз версии 6.0.0. Переход между ними может вызвать определённые сложности, т.к. разработчики в каждом релизе меняют пространство имён и некоторые принципы работы.
Зачем он нужен этот Guzzle?
Ежели вам вдруг вздумалось, распарсить какой-нибудь сайт и для этого вам нужно получить его HTML контент. Можно было бы использовать простую PHP функцию file_get_contents().
Ну а что, если сайт нет так уж прост и для начала нужно получить cookie с сайта, чтобы добраться до нужной страницы, или сделать сложные манипуляции с формами, отправив post запрос и, например, приложив при этом клиентский ssl сертификат?
Или вы хотите получать контент сразу с 50 сайтов параллельно и многопоточно? Guzzle решит эти вопросы совершенно бесплатно в форме приятного и удобного программного интерфейса.
Что бы подключить Guzzle, надобно через командную строку или какой-нибудь терминал, например как beget.ru
Вписать туда пару строк, первая чтобы установить composer,
# Install Composer curl -sS https://getcomposer.org/installer | php
вторая строка установить Guzzle.:
php composer.phar require guzzlehttp/guzzle:~6.0
А дальше начинаем уже на php. Подключаем автозагрузку
include_once ('vendor/autoload.php');
use GuzzleHttp\Client; // заюзали клиента
$client = new Client(); // создали новый класс
$response = $client->request('GET', $url); //
$body = $response->getBody(true);
print_r(get_class_methods($body));
//echo $body->getContents();
if
($response->hasHeader('Content-Length')) {
echo "It exists";
}
Ориентация на PSR-7 повлекла за собой большой внутренний рефакторинг. Поскольку Request/Response объекты стали неизменяемыми, старая система с событиями и подписчиками была заменена на систему middleware.
Небольшой пример: раньше у нас был emitter с методом on, и мы могли подписаться на событие before, указав свою функцию-обработчик. А внутри этой функции можно было поменять объект запроса Request, например, добавить какие-то http заголовки. Теперь объект Request неизменяемый, как завещал нам стандарт PSR-7. И вся система с событиями тоже канула в лету.
Вместо этого в версии 6 мы добавляем наш before обработчик (которых, кстати, может быть несколько) в специальный стек хэндлеров. Функции из этого стека будут вызваны перед отправкой сообщения, при этом каждая функция принимает в качестве параметра объект Request и должна вернуть объект Request (возможно, как-то модифицированный, если того требует наша бизнес-логика). Возвращённый объект Request пойдёт на вход следующей функции и так по цепочке. Это и есть система middleware.
На выходе ассоциативный масив Associative array значения строки запроса или значения строки добавленного в запросе.
Тип array или string
По умолчанию None
Константа GuzzleHttp\RequestOptions::QUERY
// Send a GET request to /get?foo=bar
$client->request('GET' , '/get' , [ 'query' => [ 'foo' => 'bar' ]]);
Query strings specified in the query option will overwrite all query string values supplied in the URI of a request.
// Send a GET request to /get?foo=bar
$client->request('GET' , '/get?abc=123' , [ 'query' => [ 'foo' => 'bar' ]]);
GuzzleHttp\RequestOptions::HEADERS
$client->request('GET', '/get', [
'headers' => [
'User-Agent' => 'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.1)',
'Accept' => 'application/json',
'X-Foo' => ['Bar', 'Baz']
]
]);