mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-07-24 00:55:35 +08:00
add ZMRequest support
This commit is contained in:
72
src/ZM/Utils/ZMRequest.php
Normal file
72
src/ZM/Utils/ZMRequest.php
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace ZM\Utils;
|
||||||
|
|
||||||
|
use OneBot\Util\Singleton;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Message\UriInterface;
|
||||||
|
use ZM\Framework;
|
||||||
|
|
||||||
|
class ZMRequest
|
||||||
|
{
|
||||||
|
use Singleton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 快速发起一个 GET 请求
|
||||||
|
*
|
||||||
|
* @param string|\Stringable|UriInterface $url 请求地址
|
||||||
|
* @param array $headers 请求头
|
||||||
|
* @param array $config 传入参数
|
||||||
|
* @param bool $only_body 是否只返回 Response 的 body 部分,默认为 True
|
||||||
|
* @return bool|ResponseInterface|string 返回 False 代表请求失败,返回 string 为仅 Body 的内容,返回 Response 接口对象表明是回包
|
||||||
|
*/
|
||||||
|
public static function get(string|UriInterface|\Stringable $url, array $headers = [], array $config = [], bool $only_body = true): bool|ResponseInterface|string
|
||||||
|
{
|
||||||
|
$socket = Framework::getInstance()->getDriver()->createHttpClientSocket(array_merge_recursive([
|
||||||
|
'url' => ($url instanceof UriInterface ? $url->__toString() : $url),
|
||||||
|
], $config));
|
||||||
|
$socket->withoutAsync();
|
||||||
|
$obj = $socket->get($headers, function (ResponseInterface $response) { return $response; }, function () { return false; });
|
||||||
|
if ($obj instanceof ResponseInterface) {
|
||||||
|
if ($obj->getStatusCode() !== 200 && $only_body) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!$only_body) {
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
return $obj->getBody()->getContents();
|
||||||
|
}
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 快速发起一个 POST 请求
|
||||||
|
*
|
||||||
|
* @param string|\Stringable|UriInterface $url 请求地址
|
||||||
|
* @param array $header 请求头
|
||||||
|
* @param mixed $data 请求数据,当传入了一个可以 Json 化的对象时,自动 json_encode,其他情况须传入可字符串化的变量
|
||||||
|
* @param array $config 传入参数
|
||||||
|
* @param bool $only_body 是否只返回 Response 的 body 部分,默认为 True
|
||||||
|
* @return bool|ResponseInterface|string 返回 False 代表请求失败,返回 string 为仅 Body 的内容,返回 Response 接口对象表明是回包
|
||||||
|
*/
|
||||||
|
public static function post(string|UriInterface|\Stringable $url, array $header, mixed $data, array $config = [], bool $only_body = true): bool|ResponseInterface|string
|
||||||
|
{
|
||||||
|
$socket = Framework::getInstance()->getDriver()->createHttpClientSocket(array_merge_recursive([
|
||||||
|
'url' => ($url instanceof UriInterface ? $url->__toString() : $url),
|
||||||
|
], $config));
|
||||||
|
$socket->withoutAsync();
|
||||||
|
$obj = $socket->post($data, $header, fn (ResponseInterface $response) => $response, fn () => false);
|
||||||
|
if ($obj instanceof ResponseInterface) {
|
||||||
|
if ($obj->getStatusCode() !== 200 && $only_body) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!$only_body) {
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
return $obj->getBody()->getContents();
|
||||||
|
}
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
30
tests/ZM/Utils/ZMRequestTest.php
Normal file
30
tests/ZM/Utils/ZMRequestTest.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Tests\ZM\Utils;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use ZM\Utils\ZMRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
class ZMRequestTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testPost()
|
||||||
|
{
|
||||||
|
$r = ZMRequest::post('http://httpbin.org/post', [], 'niubi=123');
|
||||||
|
$this->assertStringContainsString('123', $r);
|
||||||
|
$r2 = ZMRequest::post('http://httpbin.org/post', ['User-Agent' => 'test'], 'oijoij=ooo', [], false);
|
||||||
|
$this->assertInstanceOf(ResponseInterface::class, $r2);
|
||||||
|
$this->assertStringContainsString('ooo', $r2->getBody()->getContents());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGet()
|
||||||
|
{
|
||||||
|
$r = ZMRequest::get('http://ip.zhamao.xin');
|
||||||
|
$this->assertStringContainsString('114', $r);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user