资讯专栏INFORMATION COLUMN

最简单轻量的PHP CURL工具库 ws-http

zengdongbao / 2775人阅读

摘要:简单轻量的客户端工具库可用于测试支持代理自定义请求头以及常用请求方法需求安装使用在文件中新增如下行或者手动运行命令使用创建一个请求支持的方法此处给出一些简单的实例请求响应

ws-http 简单轻量的HTTP 客户端工具库(An Simplified, lightweight HTTP client library)

可用于 HTTP API 测试,支持 ssl,basic auth,代理,自定义请求头,以及常用HTTP 请求方法.(An HTTP API testing framework, written in PHP using curl. Supports ssl, basic auth, passing custom request headers, and most HTTP request methods.

--- https://github.com/toohamster...

需求(Requirements)

cURL

PHP 5.4+

安装(Installation) 使用 (Using) Composer

composer.json文件中新增如下行(To install ws-http with Composer, just add the following to your composer.json file):

{
    "require": {
        "toohamster/ws-http": "*"
    }
}

或者手动运行命令(or by running the following command):

php composer require toohamster/ws-http
Http Request 使用(Http Request Usage) 创建一个请求(Creating a Request)
$httpRequest = WsHttpRequest::create();
支持的方法(Support Method)
// set config
$httpRequest->jsonOpts($assoc = false, $depth = 512, $options = 0);
$httpRequest->verifyPeer($enabled);
$httpRequest->verifyHost($enabled);
$httpRequest->verifyFile($file);
$httpRequest->getVerifyFile();
$httpRequest->timeout($seconds);
$httpRequest->defaultHeaders($headers);
$httpRequest->defaultHeader($name, $value);
$httpRequest->clearDefaultHeaders();
$httpRequest->curlOpts($options);
$httpRequest->curlOpt($name, $value);
$httpRequest->clearCurlOpts();
$httpRequest->cookie($cookie);
$httpRequest->cookieFile($cookieFile);
$httpRequest->auth($username = "", $password = "", $method = CURLAUTH_BASIC);
$httpRequest->proxy($address, $port = 1080, $type = CURLPROXY_HTTP, $tunnel = false);
$httpRequest->proxyAuth($username = "", $password = "", $method = CURLAUTH_BASIC);

// http call
$httpRequest->get($url, $headers = [], $parameters = null);
$httpRequest->head($url, $headers = [], $parameters = null);
$httpRequest->options($url, $headers = [], $parameters = null);
$httpRequest->connect($url, $headers = [], $parameters = null);
$httpRequest->post($url, $headers = [], $body = null);
$httpRequest->delete($url, $headers = [], $body = null);
$httpRequest->put($url, $headers = [], $body = null);
$httpRequest->patch($url, $headers = [], $body = null);
$httpRequest->trace($url, $headers = [], $body = null);

此处给出一些简单的实例(Let"s look at a working example):

$headers = array("Accept" => "application/json");
$query = array("foo" => "hello", "bar" => "world");

$response = $httpRequest->post("http://mockbin.com/request", $headers, $query);

$response->code;        // 请求响应码(HTTP Status code)
$response->curl_info;   // curl信息(HTTP Curl info)
$response->headers;     // 响应头(Headers)
$response->body;        // 处理后的响应消息体(Parsed body)
$response->raw_body;    // 原始响应消息体(Unparsed body)
JSON 请求(Requests) (application/json)
$headers = array("Accept" => "application/json");
$data = array("name" => "ahmad", "company" => "mashape");

$body = WsHttpRequestBody::json($data);

$response = $httpRequest->post("http://mockbin.com/request", $headers, $body);

注意(Notes):

Content-Type 会自动设置成(headers will be automatically set to) application/json

表单请求(Form Requests) (application/x-www-form-urlencoded)
$headers = array("Accept" => "application/json");
$data = array("name" => "ahmad", "company" => "mashape");

$body = WsHttpRequestBody::form($data);

$response = $httpRequest->post("http://mockbin.com/request", $headers, $body);

注意(Notes):

Content-Type 会自动设置成(headers will be automatically set to) application/x-www-form-urlencoded

Multipart Requests (multipart/form-data)
$headers = array("Accept" => "application/json");
$data = array("name" => "ahmad", "company" => "mashape");

$body = WsHttpRequestBody::multipart($data);

$response = $httpRequest->post("http://mockbin.com/request", $headers, $body);

注意(Notes):

Content-Type 会自动设置成(headers will be automatically set to) multipart/form-data.

文件上传(Multipart File Upload)
$headers = array("Accept" => "application/json");
$data = array("name" => "ahmad", "company" => "mashape");
$files = array("bio" => "/path/to/bio.txt", "avatar" => "/path/to/avatar.jpg");

$body = WsHttpRequestBody::multipart($data, $files);

$response = $httpRequest->post("http://mockbin.com/request", $headers, $body);
$headers = array("Accept" => "application/json");
$body = array(
    "name" => "ahmad", 
    "company" => "mashape"
    "bio" => WsHttpRequestBody::file("/path/to/bio.txt", "text/plain"),
    "avatar" => WsHttpRequestBody::file("/path/to/my_avatar.jpg", "text/plain", "avatar.jpg")
);

$response = $httpRequest->post("http://mockbin.com/request", $headers, $body);
自定义消息体(Custom Body)

可以使用WsHttpRequestBody类提供的方法来生成消息体或使用PHP自带的序列化函数来生成消息体(Sending a custom body such rather than using the WsHttpRequestBody helpers is also possible, for example, using a serialize body string with a custom Content-Type):

$headers = array("Accept" => "application/json", "Content-Type" => "application/x-php-serialized");
$body = serialize((array("foo" => "hello", "bar" => "world"));

$response = $httpRequest->post("http://mockbin.com/request", $headers, $body);
授权校验(Authentication)
$httpRequest->auth($username, $password, $method);// default is CURLAUTH_BASIC

支持的方法(Supported Methods)

Method Description
CURLAUTH_BASIC HTTP Basic authentication.
CURLAUTH_DIGEST HTTP Digest authentication. as defined in RFC 2617
CURLAUTH_DIGEST_IE HTTP Digest authentication with an IE flavor. The IE flavor is simply that libcurl will use a special "quirk" that IE is known to have used before version 7 and that some servers require the client to use.
CURLAUTH_NEGOTIATE HTTP Negotiate (SPNEGO) authentication. as defined in RFC 4559
CURLAUTH_NTLM HTTP NTLM authentication. A proprietary protocol invented and used by Microsoft.
CURLAUTH_NTLM_WB NTLM delegating to winbind helper. Authentication is performed by a separate binary application. see libcurl docs for more info
CURLAUTH_ANY This is a convenience macro that sets all bits and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure.
CURLAUTH_ANYSAFE This is a convenience macro that sets all bits except Basic and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure.
CURLAUTH_ONLY This is a meta symbol. OR this value together with a single specific auth value to force libcurl to probe for un-restricted auth and if not, only that single auth algorithm is acceptable.
// custom auth method
$httpRequest->proxyAuth("username", "password", CURLAUTH_DIGEST);
Cookies
$httpRequest->cookie($cookie)
$httpRequest->cookieFile($cookieFile)

$cookieFile 参数必须是可读取的文件路径(must be a correct path with write permission).

请求对象(Request Object)
$httpRequest->get($url, $headers = array(), $parameters = null)
$httpRequest->post($url, $headers = array(), $body = null)
$httpRequest->put($url, $headers = array(), $body = null)
$httpRequest->patch($url, $headers = array(), $body = null)
$httpRequest->delete($url, $headers = array(), $body = null)

url - 请求地址(Endpoint, address, or uri to be acted upon and requested information from)

headers - 请求头(Request Headers as associative array or object)

body - 请求消息体(Request Body as associative array or object)

可以使用标准的HTTP方法,也可以使用自定义的HTTP方法(You can send a request with any standard or custom HTTP Method):

$httpRequest->send(WsHttpMethod::LINK, $url, $headers = array(), $body);

$httpRequest->send("CHECKOUT", $url, $headers = array(), $body);
响应对象(Response Object)

code - 请求响应码(HTTP Status code)

curl_info - HTTP curl信息(HTTP Curl info)

headers - 响应头(HTTP Response Headers)

body - 处理后的响应消息体(Parsed body)

raw_body - 原始响应消息体(Unparsed body)

高级设置(Advanced Configuration) 自定义json_decode选项(Custom JSON Decode Flags)
$httpRequest->jsonOpts(true, 512, JSON_NUMERIC_CHECK & JSON_FORCE_OBJECT & JSON_UNESCAPED_SLASHES);
超时设置(Timeout)
$httpRequest->timeout(5); // 5s timeout
代理(Proxy)

可以设置代理类型(you can also set the proxy type to be one of) CURLPROXY_HTTP, CURLPROXY_HTTP_1_0, CURLPROXY_SOCKS4, CURLPROXY_SOCKS5, CURLPROXY_SOCKS4A, and CURLPROXY_SOCKS5_HOSTNAME.

check the cURL docs for more info.

// quick setup with default port: 1080
$httpRequest->proxy("10.10.10.1");

// custom port and proxy type
$httpRequest->proxy("10.10.10.1", 8080, CURLPROXY_HTTP);

// enable tunneling
$httpRequest->proxy("10.10.10.1", 8080, CURLPROXY_HTTP, true);
代理授权验证 (Proxy Authenticaton)
// basic auth
$httpRequest->proxyAuth("username", "password", CURLAUTH_DIGEST);
缺省请求头 (Default Request Headers)
$httpRequest->defaultHeader("Header1", "Value1");
$httpRequest->defaultHeader("Header2", "Value2");

批量配置(You can set default headers in bulk by passing an array):

$httpRequest->defaultHeaders(array(
    "Header1" => "Value1",
    "Header2" => "Value2"
));

清除配置(You can clear the default headers anytime with):

$httpRequest->clearDefaultHeaders();
缺省Curl选项 (Default cURL Options)

You can set default cURL options that will be sent on every request:

$httpRequest->curlOpt(CURLOPT_COOKIE, "foo=bar");

批量配置(You can set options bulk by passing an array):

$httpRequest->curlOpts(array(
    CURLOPT_COOKIE => "foo=bar"
));

清除配置(You can clear the default options anytime with):

$httpRequest->clearCurlOpts();
SSL validation
$httpRequest->verifyPeer(false); // Disables SSL cert validation

By default is true.

Http Watcher 使用(Http Watcher Usage) 支持的方法(Support Method)
$watcher = WsHttpWatcher::create($httpResponse);

$watcher->assertStatusCode($assertedStatusCode);
$watcher->assertTotalTimeLessThan($assertedTime);
$watcher->assertHeadersExist(array $assertedHeaders = []);
$watcher->assertHeaders(array $assertedHeaders = []);
$watcher->assertBody($assertedBody, $useRegularExpression = false);
$watcher->assertBodyJson($asserted, $onNotEqualVarExport = false);
$watcher->assertBodyJsonFile($assertedJsonFile, $onNotEqualPrintJson = false);
例子(Examples)
$httpRequest = WsHttpRequest::create();

$httpResponse = $httpRequest->get("https://api.github.com");
$watcher = WsHttpWatcher::create($httpResponse);

$watcher
         ->assertStatusCode(200)
         ->assertHeadersExist(array(
            "X-GitHub-Request-Id",
            "ETag"
         ))
         ->assertHeaders(array(
            "Server" => "GitHub.com"
         ))
         ->assertBody("IS_VALID_JSON")
         ->assertTotalTimeLessThan(2);
$httpRequest = WsHttpRequest::create();
$httpResponse = $httpRequest->get("https://freegeoip.net/json/8.8.8.8");
$watcher = WsHttpWatcher::create($httpResponse);

$watcher
         ->assertStatusCode(200)
         ->assertHeadersExist(array(
            "Content-Length"
         ))
         ->assertHeaders(array(
            "Access-Control-Allow-Origin" => "*"
         ))
         ->assertBodyJsonFile(dirname(__DIR__) . "/tests/Ws/Http/_json/freegeoip.net.json");
查看所有例子(See the full examples) https://github.com/toohamster...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21854.html

相关文章

  • PHP 开发者应了解 24 个

    摘要:下面是一个例子这个库要求你至少安装了和其中的一个,这可能意味着,在大多数主机提供商提供的主机上它可能用不了。借助它,你可以忘记如何书写乏味的有一个姊妹库叫,是一个基于的实现。 showImg(http://segmentfault.com/img/bVbJml); 作为一个PHP开发者,现在是一个令人激动的时刻。每天有许许多多有用的库分发出来,在 Github 上很容易发现和使用这些库...

    0x584a 评论0 收藏0
  • Ubuntu 14.04 VPS 部署 PHP 环境及 WordPress

    摘要:软件及版本选择是目前用户数量数一数二的发行版,背后有大土豪维护,可以说是轻量级用户的最佳选择。而是目前最新的版本,目前已经发布了半年了,基本是目前支持最好的版本。是目前官方推荐的最佳的运行模式。 软件及版本选择 Ubuntu 14.04 Ubuntu 是目前用户数量数一数二的发行版,背后有大土豪维护,可以说是轻量级用户的最佳选择。而 14.04 是目前最新的 LTS 版本,目前...

    Pluser 评论0 收藏0
  • PHP编译参数configure配置详解(持续更新中)

    摘要:编译参数使用在源代码目录中,该命令可以查看所有编译参数以及对应的英文解释编译参数说明指定安装目录整合指定位置指定额外拓展配置归放处文件夹打开安全模式打开的支持打开对的支持打开对 编译参数-使用 ./configure -h在源代码目录中,该命令可以查看所有编译参数以及对应的英文解释 编译参数-说明 --prefix=/opt/php //指定 ...

    hlcc 评论0 收藏0
  • PHP编译参数configure配置详解(持续更新中)

    摘要:编译参数使用在源代码目录中,该命令可以查看所有编译参数以及对应的英文解释编译参数说明指定安装目录整合指定位置指定额外拓展配置归放处文件夹打开安全模式打开的支持打开对的支持打开对 编译参数-使用 ./configure -h在源代码目录中,该命令可以查看所有编译参数以及对应的英文解释 编译参数-说明 --prefix=/opt/php //指定 ...

    Lyux 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<