andrey-tech/http-client-php 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

andrey-tech/http-client-php

Composer 安装命令:

composer require andrey-tech/http-client-php

包简介

Простой НТТР(S) клиент на PHP7+ с троттлингом запросов и поддержкой маркера BOM в теле сообщения формата JSON

README 文档

README

Простой НТТР(S) клиент на PHP7+ с троттлингом запросов, поддержкой маркера BOM в теле сообщения формата JSON и выводом отладочной информации о запросах и ответах в STDOUT.

Latest Stable Version Total Downloads License

Содержание

Требования

  • PHP >= 7.0;
  • Произвольный автозагрузчик классов, реализующий стандарт PSR-4.

Установка

Установка через composer:

$ composer require andrey-tech/http-client-php:"^3.0"

или добавить

"andrey-tech/http-client-php": "^3.0"

в секцию require файла composer.json.

Класс HTTP

Класс \App\HTTP\НТТР обеспечивает:

  • выполнение запросов по протоколу НТТР(S);
  • настраиваемый троттлинг запросов;
  • проверку SSL/TLS-сертификата сервера c возможностью ее отключения;
  • удаление или добавление маркера ВОМ в тело сообщений формата JSON;
  • вывод отладочной информации о запросах и ответах в STDOUT.

При возникновении ошибок выбрасывается исключение класса \App\HTTP\HTTPException.

Методы класса

  • __construct() Конструктор класса.
  • request(string $url, string $method = 'GET', array $params = [], array $requestHeaders = [], array $curlOptions = []) :?array
    Отправляет запрос по протоколу HTTP(S). Возвращает декодированный ответ сервера или null при возникновении ошибки cURL.
    • $url - URL запроса;
    • $method - метод запроса;
    • $params - параметры запроса;
    • $curlOptions - дополнительные параметры для cURL.
  • isSuccess(array $successStatusCodes = []) :bool Возвращает статус успешности выполнения запроса.
    • $successStatisCodes Коды статуса НТТР, соответствующие успешному выполнению запроса. Если не передан, то используется значение по умолчанию, установленное в свойстве $successStatusCodes.
  • getHTTPCode() :int Возвращает код статуса HTTP для последнего запроса.
  • getResponse() :?string Возвращает тело последнего ответа в сыром виде.
  • getResponseHeaders() :array Возвращает заголовки последнего ответа.
  • getCurlInfo() :array Возвращает информацию о последней операции cURL.

Параметры

Дополнительные параметры устанавливаются через публичные свойства объекта класса \App\HTTP\HTTP:

Свойство По умолчанию Описание
$debugLevel \App\HTTP\HTTP::DEBUG_NONE Устанавливает уровень вывода отладочной информации о запросах в STDOUT (битовая маска, составляемая из значений DEBUG_NONE, DEBUG_URL, DEBUG_HEADERS, DEBUG_CONTENT)
$throttle 0 Максимальное число HTTP запросов в секунду (0 - троттлинг отключен)
$addBOM false Добавлять маркер ВОМ UTF-8 (EFBBBF) к запросам в формате JSON
$useCookies false Использовать cookies в запросах
$cookieFile 'temp/cookies.txt' Путь к файлу для хранения cookies
$verifySSLCertificate true Включить проверку SSL/TLS-сертификата сервера
$SSLCertificateFile 'cacert.pem' Устанавливает файл SSL/TLS-сертификатов X.509 корневых удостоверяющих центров (CA) в формате РЕМ (установка в null означает использовать файл, указанный в параметре curl.cainfo файла php.ini)
$userAgent 'HTTP-client/3.x.x' Устанавливает НТТР заголовок UserAgent в запросах
$curlConnectTimeout 60 Устанавливает таймаут соединения, секунды
$curlTimeout 60 Устанавливает таймаут обмена данными, секунды
$successStatusCodes [ 200 ] Коды статуса НТТР, соответствующие успешному выполнению запроса

Пример

use App\HTTP\HTTP;
use App\HTTP\HTTPException;

try {
    // Создаем клиента
    $http = new HTTP();

    // Устанавливаем максимальный уровень вывода отладочных сообщений в STDOUT
    $http->debugLevel = HTTP::DEBUG_URL |  HTTP::DEBUG_HEADERS | HTTP::DEBUG_CONTENT;

    // Устанавливаем троттлинг запросов на уровне не более 1 запроса в 2 секунды
    $http->throttle = 0.5;

    // Устанавливаем таймаут соединения в 30 секунд
    $http->curlConnectTimeout = 30;

    // Устанавливаем таймаут обмена данными в 30 секунд
    $http->curlTimeout = 30;

    // Отправляем POST запрос
    $response = $http->request(
        $url            = 'https://www.example.com',
        $method         = 'POST',
        $params         = [ 'username' => 'ivan@example.com', 'password' => '1234567890' ],
        $requestHeaders = [ 'Content-Type: application/json' ]
    );

    // Проверяем НТТР статус ответа
    if (! $http->isSuccess()) {
        $httpCode = $http->getHTTPCode();
        $response = $http->getResponse();
        throw new HTTPException("HTTP {$httpCode}: {$response}");
    }

    print_r($response);

} catch (HTTPException $e) {
    printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}

Пример отладочных сообщений:

[1] ===> POST https://www.example.com
POST / HTTP/1.1
Host: www.example.com
User-Agent: HTTP-client/3.x.x
Accept: */*
Content-Type: application/json
Content-Length: 55

{"username":"ivan@example.com","password":"1234567890"}

[1] <=== RESPONSE 0.9269s (200)
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sun, 14 Jun 2020 13:09:33 GMT
Etag: "3147526947"
Expires: Sun, 21 Jun 2020 13:09:33 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: EOS (vny/0453)
Content-Length: 1256

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
</head>
<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

Автор

© 2019-2026 andrey-tech

Лицензия

Данная библиотека распространяется на условиях лицензии MIT.

andrey-tech/http-client-php 适用场景与选型建议

andrey-tech/http-client-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 80.07k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2020 年 06 月 14 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「debug」 「http」 「client」 「https」 「throttling」 「bom」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 andrey-tech/http-client-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 andrey-tech/http-client-php 我们能提供哪些服务?
定制开发 / 二次开发

基于 andrey-tech/http-client-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 80.07k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 30
  • 依赖项目数: 3
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 2
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-06-14