1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gouguoyin-easyhttp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

EasyHttp — это легковесный, семантический и удобный для IDE HTTP-клиент, поддерживающий обычные HTTP-запросы, асинхронные запросы и параллельные запросы, что позволяет быстро взаимодействовать с другими веб-приложениями через HTTP.

EasyHttp не требует обязательной установки cURL; если cURL отсутствует, он автоматически выбирает использование PHP-потока, либо вы можете предоставить свой способ отправки HTTP-запросов.

Если вам понравился EasyHttp, не забудьте поставить лайк ^_^!

github: github.com/gouguoyin/easyhttp

gitee: gitee.com/gouguoyin/easyhttp

Инструкция по установке

Требования к окружению

  • PHP >= 5.5.0
  • Если используется PHP-поток, allow_url_fopen должно быть активировано в php.ini.
  • Если используется cURL, cURL >= 7.19.4 и OpenSSL & zlib должны быть скомпилированы.

Установка одним щелчком мыши

composer require gouguoyin/easyhttp

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

Синхронные запросы

Обычные запросы
$response = Http::get('http://httpbin.org/get');

$response = Http::get('http://httpbin.org/get?name=gouguoyin');

$response = Http::get('http://httpbin.org/get?name=gouguoyin', ['age' => 18]);

$response = Http::post('http://httpbin.org/post');

$response = Http::post('http://httpbin.org/post', ['name' => 'gouguoyun']);

$response = Http::patch(...);

$response = Http::put(...);

$response = Http::delete(...);

$response = Http::head(...);

$response = Http::options(...);
Отправка запросов с указанием типа содержимого
// application/x-www-form-urlencoded (по умолчанию)
$response = Http::asForm()->post(...);
```// application/json
$response = Http::asJson()->post(...);
Отправка запросов с использованием multipart формы
$response = Http::asMultipart(
    'file_input_name', file_get_contents('photo1.jpg'), 'photo2.jpg'
)->post('http://test.com/attachments');

$response = Http::asMultipart(
    'file_input_name', fopen('photo1.jpg', 'r'), 'photo2.jpg'
)->post(...);

$response = Http::attach(
    'file_input_name', file_get_contents('photo1.jpg'), 'photo2.jpg'
)->post(...);

$response = Http::attach(
    'file_input_name', fopen('photo1.jpg', 'r'), 'photo2.jpg'
)->post(...);

Атрибут enctype формы должен быть установлен как multipart/form-data.

Запрос с передачей HTTP-заголовков
$response = Http::withHeaders([
    'x-powered-by' => 'gouguoyin'
])->post(...);
Запрос с переадресацией
// По умолчанию
$response = Http::withRedirect(false)->post(...);

$response = Http::withRedirect([
    'max'             => 5,
    Yöntem            => false,
    'referer'         => true,
    'protocols'       => ['http', 'https'],
    'track_redirects' => false
])->post(...);
Запрос с аутентификацией
// Аутентификация Basic
$response = Http::withBasicAuth('username', 'password')->post(...);

// Аутентификация Digest (требует поддержки HTTP-сервером)
$response = Http::withDigestAuth('username', 'password')->post(...);
Запрос с указанием User-Agent
$response = Http::withUA('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36')->post(...);
Запрос с передачей токена
$response = Http::withToken('token')->post(...);
Запрос с передачей сертификата
$response = Http::withCert('/path/server.pem', 'password')->post(...);
Запрос с проверкой SSL-сертификата
// По умолчанию
$response = Http::withVerify(false)->post(...);

$response = Http::withVerify('/path/to/cert.pem')->post(...);
```###### Запрос с передачей cookies

```php
$response = Http::withCookies(array $cookies, string $domain)->post(...);
Запрос с указанием версии протокола
$response = Http::withVersion(1.1)->post(...);
Запрос с использованием прокси
$response = Http::withProxy('tcp://localhost:8125')->post(...);

$response = Http::withProxy([
    'http'  => 'tcp://localhost:8125', // Используйте этот прокси для HTTP
    'https' => 'tcp://localhost:9124', // Используйте этот прокси для HTTPS,
    'no'    => ['.com.cn', 'gouguoyin.cn'] // Не используйте прокси для этих доменов
])->post(...);
Установка времени ожидания (в секундах)
$response = Http::timeout(60)->post(...);
Установка задержки (в секундах)
$response = Http::delay(60)->post(...);
Установка количества параллельных запросов
$response = Http::concurrency(10)->promise(...);

Асинхронные запросы

use Gouguoyin\EasyHttp\Response;
use Gouguoyin\EasyHttp\RequestException;

Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json', ['token' => TOKEN], function (Response $response) {
    echo 'Асинхронный запрос выполнен успешно, содержимое ответа: ' . $response->body() . PHP_EOL;
}, function (RequestException $e) {
    echo 'Асинхронный запрос завершился ошибкой, код ошибки: ' . $e->getCode() . ', сообщение об ошибке: ' . $e->getMessage() . PHP_EOL;
});
echo json_encode(['code' => 200, 'msg' => 'Запрос выполнен успешно'], JSON_UNESCAPED_UNICODE) . PHP_EOL;

// Ответ {"code":200,"msg":"Запрос выполнен успешно"} Асинхронный запрос выполнен успешно, содержимое ответа: {"code":200,"msg":"success","second":3}Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json', function (Response $response) { echo 'Асинхронный запрос выполнен успешно, содержимое ответа:' . $response->body() . PHP_EOL; }, function (RequestException $e) { echo 'Асинхронный запрос завершился ошибкой, сообщение об ошибке:' . $e->getMessage() . PHP_EOL; }); echo json_encode(['code' => 200, 'msg' => 'Запрос выполнен успешно'], JSON_UNESCAPED_UNICODE) . PHP_EOL;// Ответ {"code":200,"msg":"Запрос выполнен успешно"}

Асинхронный запрос завершился ошибкой, сообщение об ошибке: cURL error 1: Protocol "http1" not supported or disabled in libcurl (смотрите https://curl.haxx.se/libcurl/c/libcurl-errors.html)

Http::postAsync(...);

Http::patchAsync(...);

Http::putAsync(...);

Http::deleteAsync(...);

Http::headAsync(...);

Http::optionsAsync(...);

Асинхронные параллельные запросы

use Gouguoyin\EasyHttp\Response;
use Gouguoyin\EasyHttp\RequestException;

$promises = [
    Http::getAsync('http://easyhttp.gouguoyin.cn/api/sleep3.json'),
    Http::getAsync('http1://easyhttp.gouguoyin.cn/api/sleep1.json', ['name' => 'gouguoyin']),
    Http::postAsync('http://easyhttp.gouguoyin.cn/api/sleep2.json', ['name' => 'gouguoyin']),
];

Http::concurrency(10)->multiAsync($promises, function (Response $response, $index) {
    echo "Выполнен асинхронный запрос №$index, время выполнения:" . $response->json()->second . ' секунд' . PHP_EOL;
}, function (RequestException $e, $index) {
    echo "Асинхронный запрос №$index завершился ошибкой, причина ошибки:" . $e->getMessage() . PHP_EOL;
});

// Ответ
Асинхронный запрос 1 завершился ошибкой, причина ошибки: cURL error 1: Protocol "http1" not supported or disabled in libcurl (смотрите https://curl.haxx.se/libcurl/c/libcurl-errors.html)
Выполнен асинхронный запрос 2, время выполнения: 2 секунды
Выполнен асинхронный запрос 0, время выполнения: 3 секунды

Если метод concurrency() не был вызван, количество параллельных запросов по умолчанию равно количеству элементов в массиве $promises.

Обработка ответа

При получении ответа возвращается экземпляр класса Gouguoyin\EasyHttp\Response $response, который предоставляет следующие методы для проверки ответа:```php $response->body() : string; $response->json() : object; $response->array() : array; $response->status() : int; $response->ok() : bool; $response->successful() : bool; $response->serverError() : bool; $response->clientError() : bool; $response->headers() : array; $response->header($header) : string;


## Обработка ошибок

Запрос может выбрасывать исключение `Gouguoyin\EasyHttp\RequestException $e` при возникновении ошибок как на клиентской, так и на серверной стороне. Экземпляр этого исключения предоставляет следующие методы для получения информации об ошибке:

```php
$e->getCode() : int;
$e->getMessage() : string;
$e->getFile() : string;
$e->getLine() : int;
$e->getTrace() : array;
$e->getTraceAsString() : string;

Журнал обновлений

2020-03-30

  • Устранена проблема с отсутствием поддержки автодополнения IDE в некоторых случаях
  • Добавлена поддержка параметров в URL для методов get() и getAsync()
  • Добавлен метод withUA()
  • Добавлен метод withStream()
  • Добавлен метод asMultipart() как альтернативное название для attach()
  • Добавлен метод multiAsync() для асинхронных параллельных запросов

2020-03-20

  • Добавлен метод getAsync() для асинхронных GET-запросов
  • Добавлен метод postAsync() для асинхронных POST-запросов
  • Добавлен метод patchAsync() для асинхронных PATCH-запросов
  • Добавлен метод putAsync() для асинхронных PUT-запросов
  • Добавлен метод deleteAsync() для асинхронных DELETE-запросов
  • Добавлен метод headAsync() для асинхронных HEAD-запросов
  • Добавлен метод optionsAsync() для асинхронных OPTIONS-запросов## Список задач
  • Асинхронные запросы
  • Параллельные запросы
  • Механизм повторных попыток
  • Поддержка HTTP/2
  • Поддержка Swoole

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

Вы можете оставить комментарий после Вход в систему

Введение

EasyHttp — это лёгкий, семантический и дружественный к IDE HTTP-клиент, который поддерживает распространённые HTTP-запросы, асинхронные запросы и параллельные запросы, что позволяет вам быстро использовать HTTP-запросы для взаимодействия с другими веб-приложениями. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/gouguoyin-easyhttp.git
git@api.gitlife.ru:oschina-mirror/gouguoyin-easyhttp.git
oschina-mirror
gouguoyin-easyhttp
gouguoyin-easyhttp
master