HttpClient
協程Http
客戶端,基于\Swoole\Http\Client
實現,在協程內快速發起http
請求。
安裝
composer require easyswoole/http-client
請求
需要在協程環境內發起請求。
請求實例
$client = new \EasySwoole\HttpClient\HttpClient('http://easyswoole.com');
設置Url
可在實例化的時候,傳入Url
,或者如下:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setUrl('http://easyswoole.com');
設置query
通過url
傳入.
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setUrl('http://easyswoole.com?a=1');
通過方法傳入.
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setQuery(['a' => 1]);
注意:
setQuery
方法將你原本url
的參數也帶過來.
設置Ssl
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setEnableSSL(true);
設置等待超時時間
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setTimeout(5);
設置連接超時時間
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setConnectTimeout(10);
設置Header
設置單項:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setHeader('test','test');
設置多項:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setHeaders(['test' => 'test']);
參數:
-
$isMerge
默認:true
,false
清空原有Header
重新賦值。 -
$strtolower
默認:true
,false
不進行小寫轉換。
設置Cookie
設置單項:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->addCookie('test','test');
設置多項:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->addCookies(['test' => 'test']);
參數:
-
$isMerge
默認:true
,false
清空原有Cookie
重新賦值。
設置XMLHttpRequest
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setXMLHttpRequest();
設置ContentType
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setContentType($client::CONTENT_TYPE_APPLICATION_XML);
json
:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setContentTypeJson();
xml
:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setContentTypeXml();
from-data
:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setContentTypeFormData();
from-urlencode
:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setContentTypeFormUrlencoded();
設置BasicAuth
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setBasicAuth('admin','admin');
設置KeepAlive
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setKeepAlive(true);
設置客戶端配置
單個設置:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setClientSetting('bind_address','127.0.0.1');
批量設置:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setClientSettings([
'bind_address'=>'127.0.0.1',
'bind_port'=>'8090'
]);
設置FollowLocation
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->enableFollowLocation(5);
參數:
-
$maxRedirect
默認5,表示最多根據30x狀態碼進行的重定向次數。0 為關閉。
設置允許自簽證書
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setSslVerifyPeer(true,true);
設置服務器主機名稱
與ssl_verify_peer配置配合使用
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setSslHostName('');
設置驗證用的Ssl證書
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setSslCafile('');
設置Ssl證書目錄
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setSslCapath('');
設置Ssl證書文件
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setSslCertFile('');
設置Ssl證書私鑰文件
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setSslKeyFile('');
設置代理
http代理:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setProxyHttp('127.0.0.1','1087','user','pass');
socks5代理:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setProxySocks5('127.0.0.1','1086','user','pass');
設置端口綁定
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->setSocketBind('127.0.0.1','8090');
GET
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->get();
參數:
-
$headers
設置Header
HEAD
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->head();
DELETE
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->delete();
參數:
-
$headers
設置Header
PUT
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->put();
參數:
-
$data
請求的數據 -
$headers
設置Header
POST
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->post();
post-xml
:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->postXml();
post-json
:
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->postJson();
參數:
-
$data
請求的數據 -
$headers
設置Header
PATCH
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->patch();
參數:
-
$data
請求的數據 -
$headers
設置Header
OPTIONS
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->options();
參數:
-
$data
請求的數據 -
$headers
設置Header
Download
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->download('./test.png');
參數:
-
$filename
保存路徑 -
$offset
寫入偏移量 -
$httpMethod
請求方法 -
$rawData
請求數據 -
$contentType
設置ContentType
上傳文件
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->post([
'file' => new \CURLFile(__FILE__)
]);
分片上傳:
$file = new EasySwoole\HttpClient\Bean\CURLFile('file',__FILE__);
// 設置表單的名稱
$file->setName('file');
// 設置要文件的路徑
$file->setPath(__FILE__);
// 設置文件總大小
$file->setLength(filesize(__FILE__));
// 設置offset(分片上傳的關鍵)
$file->setOffset(0);
// 設置文件類型
$file->setType('image/png');
/** @var \EasySwoole\HttpClient\HttpClient $client **/
$client->post([
'file' => $file
]);
響應
以上快速發起http
請求成功后,如(GET
,POST
),將會返回EasySwoole\HttpClient\Bean\Response
。
獲取響應體
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->getBody();
當響應體為json
,解析:
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->json();
參數:
-
$assoc
默認false
,false
為object
,true
為數組。
當響應體為jsonp
,解析:
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->jsonp();
參數:
-
$assoc
默認false
,false
為object
,true
為數組。
當響應體為xml
,解析:
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->xml();
參數:
-
$assoc
默認false
,false
為object
,true
為數組。
獲取錯誤碼
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->getErrCode();
獲取錯誤信息
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->getErrMsg();
獲取響應狀態碼
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->getStatusCode();
獲取響應頭及設置的Cookie
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->getSetCookieHeaders();
獲取請求的Cookie及響應頭
/** @var \EasySwoole\HttpClient\Bean\Response $response **/
$response->getCookies();
WebSocket-Client
$client = new \EasySwoole\HttpClient\HttpClient('127.0.0.1:9501');
$upgradeResult = $client->upgrade(true);
$frame = new \Swoole\WebSocket\Frame();
//設置發送的消息幀
$frame->data = json_encode(['action' => 'hello','content'=>['a'=>1]]);
$pushResult = $client->push($frame);
$recvFrame = $client->recv();
//將返回bool或一個消息幀,可自行判斷
var_dump($recvFrame);
recv只會接收一次服務器的消息,如果需要一直接收,請增加while(1)死循環。