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