Guzzle – простой PHP HTTP Клиент


Guzzle — гибкий HTTP клиент для PHP

Guzzle — гибкий HTTP клиент для PHP

Если в проекте необходимо обратиться к сторонним сервисам или библиотекам, получить контент сразу с нескольких сайтов или распарсить сайт, предварительно получив его cookie, тогда для этого как нельзя лучше подойдет библиотека Guzzle.

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

Устанавливается Guzzle через composer. В файле composer.json добавляем в зависимости библиотеку:

Сохраняем файл и выполняем команду composer install .

Теперь, после загрузки библиотеки, можно ее инициализировать:

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

В приведенном выше коде мы отправили GET запрос по адресу http://site.ru/api?param=test.

Тип запроса соответствует названиям метода. Например, для GET — это будет $client→get() , для POST — $client→post() , для PUT — $client→put() и так далее.

Но, ведь после отправки нам нужен ответ от сервера, не так ли? Его можно получить методом $response→getBody() . А методом $response→getStatusCode() — код ответа сервера:

$response→getBody() возвращает поток. Чтобы вывести содержимое в виде строки, нужно использовать метод $body→getContents() . Также можно прочитать побайтово через метод $body→read() . А вот метод $body→seek() переводит указатель на нужную позицию в потоке. Например:

Подводя итоги, хочу сказать, что эта небольшая демонстрация только верхушка айсберга и того, на что способен Guzzle. Структурированная система плагинов, запросов и механизмов обработки ответа делает его гибким HTTP клиентом для PHP.

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

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

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

Но прежде чем приступать к написанию скрипта, необходимо ознакомиться с тем как, работает сайт — какие запросы принимает и как авторизовывает посетителя. Используются лишь только cookies или еще какие-либо другие средства? Ответив на эти вопросы, можно двигаться дальше.

Сначала устанавливаем саму библиотеку GuzzleHttp:

composer require guzzlehttp/guzzle


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

‘https://какой-то-сайт.ru/’, // базовый uri, от него и будем двигаться дальше
‘verify’ => false, // если сайт использует SSL, откючаем для предотвращения ошибок
‘allow_redirects’ => false, // запрещаем редиректы
‘headers’ => [ // устанавливаем различные заголовки
‘User-Agent’ => ‘Mozilla/5.0 (Linux 3.4; rv:64.0) Gecko/20100101 Firefox/15.0’,
‘Accept’ => ‘text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8’,
‘Content-Type’ => ‘application/x-www-form-urlencoded’ // кодирование данных формы, в такой кодировке
браузер отсылает данные на сервер
]
]);

/**
* В метод request передается три параметра:
*
*
* 1. Методы GET, POST
* 2. URL на который отправляются данные формы
* 3. forms_params — значения логина и пароля
*/
$login = $client -> request(‘POST’,’/login.html’,[
‘form_params’ => [
‘login’ => ‘VasyaPupkin’,
‘password’ => ‘SuperPuperParol’
]
]);

print($login -> getStatusCode()); // статус код, если 200 или 302, то все норм, хотя не всегда)))
$cookie = $login -> getHeaderLine(‘Set-Cookie’); // обязательно вытаскиваем cookies из запроса, без них ничего не сработает

$discounts = $client -> request(‘GET’,’secret/discounts.html’,[
‘headers’ => [
‘Cookie’ => $cookie
],
/*’debug’ => true*/ // если захотите посмотреть что-же отправляет ваш скрипт, расскоментируйте
]);

//print $articles -> getStatusCode();

// html код страницы со скидками, например
$body = $articles -> getBody() -> getContents();

Скрипт выше хорошо комментирован, но я отмечу пару важных моментов. После авторизации на сайте, вы можете выполнять любые запросы, используя метод request, главное передать в него правильные заголовки через массив headers. Если что-то пойдет не так, то используйте параметр debug для отображения того, что отправляется в данный момент.

Таким образом, с помощью библиотеки GuzzleHttp можно выполнять как простые так и весьма сложные Http запросы.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):

  • Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Guzzle

    Guzzle — удобная библиотека для получения содержимого веб сайта и последующей обработки его. Данная библиотека по умолчанию использует — CURL, а в случае ее отсутствия, то использует обертку — PHP потоков (php stream). Guzzle распространяется под лицензией — MIT. Она способна выполнять как синхронные запросы к веб ресурсу, так и работать с асинхронными запросами. Для работы Guzzle необходимы слудеющие условия:

    1. PHP 5.5.0
    2. Для использования обертки потоков, должно быть активировано — allow_url_fopen.
    3. Для использования CURL. Должен быть установлен cURL >= 7.19.4 с поддержкой OpenSSL и библиотеки zlib.
    Цукерберг рекомендует:  Html - Как в водить вв-коды со сторонних ресурсов.

    Устанавливать рекомендуется через Composer:

    php composer.phar require guzzlehttp/guzzle:

    Работа с данной библиотекой, довольно проста, но имеющая достаточно мощную начинку. Давайте подробно разберем ее работу на следующем примере:

    2. Асинхронный запрос:

    Как видите все довольно просто, но не менее эффективно. Всем удачи в использовании данной библиотеки. Для более глубокого изучения всех ее возможностей, добро пожаловать на сайт Guzzle. Так же библиотека размещена на GitHub.

    htmllab

    Guzzle — PHP HTTP клиент

    Guzzle — это PHP HTTP клиент, который позволяет просто отправлять HTTP запросы и легко интегрируется в работу с веб-сервисами. Среди его плюсов: простой интерфейс работы со строкой запросов, использование HTTP-кук (cookies), загрузка данных, поддержка PSR-7 интерфейса и другие особенности. В этом видео рассматривается установка Guzzle и построение одного простого запроса методом GET к стороннему сайту. Guzzle может служить хорошей заменой использованию curl и file_get_contents().

    Первый шаг с Guzzle

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

    Для отправки комментария вам необходимо авторизоваться.


    Библиотека Guzzle, PHP HTTP client

    Для установки решения/модуля необходимо наличие активной лицензии Битрикс

    Сделайте репост в соцсетях и получите 500 бонусных баллов на счёт:

    Технические данные

    Опубликовано: 02.08.2020
    Подходящие редакции: Бизнес Малый бизнес Стандарт Старт
    Адаптивность: Нет
    Поддержка композита: Нет

    Вы можете задать любой интересующий вас вопрос по товару или работе магазина.

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

    Top 7: Best PHP Http Client Libraries

    A lot of web applications rely on services provided by third party application through REST APIs. Those apps offer certain endpoints where you can retrieve, update or delete information according to the data, method of your request etc. This however can’t be made in your server without a decent Http client that executes the requests for you. There are a lot of libraries that achieve this, so what’s the right one for you? According to your requirements, you need to make a desicion by yourself based on the features that the library offers. In this article, we’ll share with you the best 7 Http client libraries for PHP that will help you to communicate with applications around the world through APIs easily.

    7. Yii2 Httpclient

    The Yii2 Httpclient is an extension of the Yii Framework and allows you to implement an useful Http client with a couple of lines of code. In order to send HTTP requests, you’ll need to instantiate [[\yii\httpclient\Client]] and use its createRequest() method to create new HTTP request. Then you should configure all request parameters according to your goal and send request. As the result you’ll get a [[\yii\httpclient\Response]] instance, which holds all response information and data. For example:

    6. Buzz

    Buzz is a lightweight PHP 5.3 library for issuing HTTP requests. Buzz was created by Kris Wallsmith back in 2010. The project grown very popular over the years with more than 7 million downloads. Since August 2020 Tobias Nyholm is maintaining this library. The idea of Buzz will still be the same, we should have a simple API and mimic browser behavior for easy testing. We should not reinvent the wheel and we should not be as powerful and flexible as other clients (ie Guzzle). We do, however, take performance very seriously.

    We do love PSRs and this is a wish list of what PSR we would like to support:

    • PSR-1 (Code style)
    • PSR-2 (Code style)
    • PSR-4 (Auto loading)
    • PSR-7 (HTTP messages)
    • PSR-15 (HTTP middlewares)
    • PSR-17 (HTTP factories)
    • PSR-18 (HTTP client)

    Buzz syntax is as well friendly and easy to write:

    5. Requests

    Requests is a HTTP library written in PHP, exclusively written to be easy to use. It is roughly based on the API from the excellent Requests Python library. Requests is ISC Licensed (similar to the new BSD license) and has no dependencies, except for PHP 5.2+. Despite PHP’s use as a language for the web, its tools for sending HTTP requests are severely lacking. cURL has an interesting API, to say the least, and you can’t always rely on it being available. Sockets provide only low level access, and require you to build most of the HTTP response parsing yourself. It’s syntax is pretty friendly and easy to use:


    Requests allows you to send HEAD, GET, POST, PUT, DELETE, and PATCH HTTP requests. You can add headers, form data, multipart files, and parameters with simple arrays, and access the response data in the same way. Requests uses cURL and fsockopen, depending on what your system has available, but abstracts all the nasty stuff out of your way, providing a consistent API.

    4. Httplug

    PHP-HTTP is the next step in standardizing HTTP interaction for PHP packages. It builds on top of PSR-7, which defines interfaces for HTTP requests and responses. PSR-7 does not describe, however, the way you should create requests or send them. PHP-HTTP aims to fill that gap by offering an HTTP client interface: HTTPlug.

    PHP-HTTP has three goals:

    1. Encourage package developers to depend on the simple HTTPlug interface instead of concrete HTTP clients.
    2. Provide good quality HTTP-related packages to the PHP community.
    3. Over time, make HTTPlug a PHP Standards Recommendation (PSR) so that clients will directly implement the HTTPlug interface and our adapters are no longer needed.

    HTTPlug abstracts from HTTP clients written in PHP, offering a simple interface. It also provides an implementation-independent plugin system to build pipelines regardless of the HTTP client implementation used.

    3. Httpful

    Httpful is a simple, chainable, readable PHP library intended to make speaking HTTP sane. It lets the developer focus on interacting with APIs instead of sifting through curl set_opt pages and is an ideal PHP REST client. Httpful features:

    • Readable HTTP Method Support (GET, PUT, POST, DELETE, HEAD, and OPTIONS)
    • Custom Headers
    • Automatic «Smart» Parsing
    • Automatic Payload Serialization
    • Basic Auth
    • Client Side Certificate Auth
    • Request «Templates»

    2. Unirest PHP

    Unirest is a set of lightweight HTTP libraries available in multiple languages, built and maintained by Mashape, who also maintain the open-source API Gateway Kong. This library features:

    • Utility methods to call GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH requests
    • Supports form parameters, file uploads and custom body entities
    • Supports gzip
    • Supports Basic, Digest, Negotiate, NTLM Authentication natively
    • Customizable timeout
    • Customizable default headers for every request (DRY)
    • Automatic JSON parsing into a native object for JSON responses

    1. Guzzle

    Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services. Guzzle features:

    • Simple interface for building query strings, POST requests, streaming large uploads, streaming large downloads, using HTTP cookies, uploading JSON data, etc.
    • Can send both synchronous and asynchronous requests using the same interface.
    • Uses PSR-7 interfaces for requests, responses, and streams. This allows you to utilize other PSR-7 compatible libraries with Guzzle.
    • Abstracts away the underlying HTTP transport, allowing you to write environment and transport agnostic code; i.e., no hard dependency on cURL, PHP streams, sockets, or non-blocking event loops.
    • Middleware system allows you to augment and compose client behavior.


    If you know another awesome Http Client Library for PHP, please share it with the community in the comment box.

    Как сделать get запрос с помощью Guzzle?

    Работаю с библиотекой https://github.com/guzzle/guzzle, а точнее знакомлюсь.
    Ситуация такова:
    Есть api, к которому пишется клиент на php. Для отправки методов я и выбрал эту библиотеку. Мне нужно отправить пост запрос, получить токен доступа и затем уже работать с ним, отправляя гет запросы.

    Отправляю пост запрос:

    Тут все хорошо, все работает. Получаю токен.

    Дальше проблема в гет запросе:

    Дело в том, что параметр access_token не летит на сервер. Тоесть такой вариант записи не работает.

    Но работает вот такой вариант:

    Подскажите пожалуйста в чем проблема, поему не работает передача параметров в массиве ?

    Guzzle – PHP HTTP Client

    As you probably know, website development can be broken up into 2 main areas:

    • Front end (what the end user sees)
    • Back end (what the server has to do in order to provide the requested data)

    While front end development frequently uses several data sources to display a page, simple dynamic sites would only depend on data coming from a database hosted on the same server. As back end developers today, we are in need of retrieving data from a database server on a different host, or consuming an API from a third-party provider, while making it look like everything happened in our server.

    PHP comes with the native cURL client (if enabled), that can be frightening to the newcomer or hard to use to consume SOAP services. Other frameworks implement their versions of HTTP, REST, and SOAP clients to some degree. However, if you do not wish to use cURL, you do not have a framework or you are not a fan of your framework’s solution, Guzzle to the rescue.

    Guzzle is an independent HTTP client for PHP. Installing Guzzle is very easy: you’ll need to get composer first (http://www.sitepoint.com/php-dependency-management-with-composer/). Once you got composer installed and ready, create your basic composer.json file, which would look like the following:

    Now just add the guzzle library to the composer.json file in the require section as follows:

    Having saved the file, you just need to run the composer install command and you should be good to go!

    Basics

    As a cryptography enthusiast, searching for sources of entropy data for key generation is a hobby of mine. One good source is the ANU Quantum Random Numbers Server at https://qrng.anu.edu.au. Supposedly their RNG is based on quantum physics, so it is worth taking a look at when generating random data with a good entropy level.


    Fortunately they have a public API we can consume, so here is where Guzzle will come in handy:

    The first two lines should be familiar to anyone using composer and its autoloading mechanisms. When we instantiate a Client object, we should pass as a constructor parameter the URL we want to connect to. Please notice that it does not use path and/or URL parameters – this will come in a minute.

    We finally indicate the path ( /API/jsonI.php ) and the URL parameters ( length=10&type=uint8 ) to the client, building an HTTP GET request via the $client->get() method. If we wanted to build a POST request, the client object has post() and many other HTTP request methods. For sending the request, the $request->send() method should be invoked, catching the response in the $response variable. Finally if we want to see what the response from the remote server was, we execute the $response->getBody() method. TRUE can be sent as a parameter to the getBody() method to get the result as a string.

    Path and URL Parameters Manipulation

    In the previous example, we used a string to indicate the path and URL parameters to build the request… This might not be the most elegant solution. We might decide to pass on certain URL parameters or use different paths according to certain conditions. We can easily accomplish proper handling of path and URL parameters by making some adjustments to the code.

    First we create an empty request from the Guzzle client with the $client->getRequest() method. The request object has several methods; in this case we’ll use the setPath() and getQuery() methods. setPath() should be pretty straightforward; as for getQuery , we use Guzzle’s fluent interface to set the URL parameters one by one.

    Logging

    When we develop applications that consume 3rd party services through a network, communication problems often arise, so it is very important to keep a log with all the requests and responses, at least during development stages so we can debug what is going on.

    To have monolog available in your project, you’ll have to modify your composer.json file and run the composer update command. Your composer.json file should look like the following:

    To make Guzzle use monolog and write all requests and responses we send and receive, we need to make some adjustments to our code:

    First we create a monolog instance with $logger = new Logger(‘client’); . Monolog posseses several handlers, in this case we will use the StreamHandler to write to a file named guzzle.log . Then we create guzzle’s monolog adapter by instantiating a MonologLogAdapter object. Next we create a log plugin object using Guzzle’s log plugin manager LogPlugin. Please notice the MessageFormatter::DEBUG_FORMAT constant which tells Guzzle to log full request and response messages. Please refer to Guzzle’s docs to see which message formatters are available. Last, we add the log plugin to the guzzle client by calling $client->addSubscriber($logPlugin);

    Interacting with Github’s API

    Let’s have a look at this code and then I´ll explain it line by line

    Detailed explanation follows.

    We create a client which will use Github’s API base URL.

    As we previously saw, we set up logging capabilities, so we are able to debug communication issues.

    First we want to request authorization to use Github’s API (http://developer.github.com/v3/oauth/) without having to use our username and password every time, so we need to perform an HTTP POST verb to https://api.github.com/authorizations . Remember that we set up the base URL when we created our client, so we only need to set the path. To see a list of possible parameters that can be sent to Github’s API, please refer to their documentation.

    For this one time, we will use HTTP Basic Authentication. Remember that the only mechanism preventing the sending of your credentials in plain text is HTTPS (as shown in the API url) – performing the request through something as insecure as HTTP could lead to someone intercepting your data. In the second line, we are configuring cURL not to verify the SSL certificate, as this can solve several communication issues.

    Finally we send the request. The response is gotten through the getBody() method, the TRUE flag is used to configure Guzzle to return a plain string. Remember that Github’s API is RESTful, so everything will be JSON encoded, and thus we will decode it to an object using json_decode().


    The Oauth token will be contained inside the ‘token’ attribute. Please refer to Github’s API documentation for a detailed explanation of the response format.

    We will be performing a new request. This time we want to list our authorized keys that are configured in our account, mostly for accessing our repositories through SSH. This time an HTTP GET request has to be sent, but instead of using our credentials in plain text, we will use the Oauth token we were given; this token has to be added as a query parameter to the URL we are requesting.

    Finally we send the request and get the response body, ready to be parsed and used for whichever purpose you like.

    Conclusion

    This little demonstration is just the tip of the iceberg of what Guzzle is capable of. With a nicely structured plugin system, request and response handling mechanism, you can finally tame the wide quantity of API’s the internet has to offer.

    If you have a specific use case of Guzzle you’d like to demonstrate or just some general feedback, let us know!

    GuzzleHttp Client — данные случайной формы

    Начнем с примера.

    если у меня есть фиксированный параметр формы (имя, адрес электронной почты, телефон), тогда код метода Guzzle Post будет следующим:

    Над кодом работает отлично.

    Но когда у вас нет параметра fix form, то как отправлять данные с помощью Guzzle?

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

    Итак, как работать с этой ситуацией с динамической формой?

    Класс ‘Guzzle \ Http \ Client’ не найден

    Я пытаюсь развить этот урок на сайте http://www.sitepoint.com/guzzle-php-http-client/ , Я следовал за установкой шаг за шагом здесь http://docs.guzzlephp.org/en/latest/overview.html#installation и я пытаюсь запустить первый простой пример, но он дает мне проблему. Я также проверил свои требования к версии PHP (5.5): у меня 5.6, так что все в порядке.

    Я использую MAC, см. Мой код ниже.

    Пожалуйста, что я пропускаю?

    Решение

    Кажется, ваш следующий урок, который основан на Guzzle 3.7 и вы установили Guzzle 6 ,

    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих