缘起
此文章,将浅谈一下 Typecho 的 Http 客户端 - Typecho_Http_Client
因为,网络上,基本没有Typecho_Http_Client
的使用实例,正巧,为了给南博App写一个快速更新XmlRpc文件的插件。
最初Aidnabo用的CURL,还是参考了乔千的,但是呢,很多人说下载失败,等等很多失败错误。
于是,今天我有重写了XmlRpc更新功能。
这次,我使用了Typecho封装的Typecho_Http_Client
理由
为什么,我要使用Typecho封装的Typecho_Http_Client
呢?
- 一来,本身就是写的Typecho插件
- 二来,现成封装的Http客户端
- 三来,Typecho封装的Http客户端,不仅支持CURL,还支持Socket
简单实例
Typecho 的 Http 客户端,不需要你会curl或者Socket
你需要简单的调用即可
简单
记得要try catch
比如向百度首页,发送一个空白请求
Typecho_Http_Client::get()->send("https://www.baidu.com/");
比如我要获取baidu首页的内容
$client = Typecho_Http_Client::get();
$client->send("https://www.baidu.com/");
// 得到的内容
$response = $client->getResponseBody();
对,就这么简单。
简单
设置超时时间为10秒
$client = Typecho_Http_Client::get();
$client->setTimeout(10);
$client->send("https://www.baidu.com/");
// 得到的内容
$response = $client->getResponseBody();
简单
带参数的,默认就是POST了
$client = Typecho_Http_Client::get();
$client->setTimeout(5)
->setData(array(
'name' => "admin",
'password' => "123456",
))
->send("https://www.baidu.com/");
// 得到的内容
$response = $client->getResponseBody();
简单
带参数的,带User-Agent
$client = Typecho_Http_Client::get();
$client->setHeader('User-Agent', 'your User-Agent');
$client->setTimeout(5)
->setData(array(
'name' => "admin",
'password' => "123456",
))
->send("https://www.baidu.com/");
// 得到的内容
$response = $client->getResponseBody();
进阶实例
基本上,网上没有关于Typecho_Http_Client
使用的实例。
我就粗糙的写几个实例。我也是才看没多久,如有错,还请斧正。
第一步
获取可用的连接
// 获取可用的连接
$client = Typecho_Http_Client::get();
如果你指明要使用CURL或者Socket
// 使用CURL
$client = Typecho_Http_Client::get("Curl");
使用Socket
$client = Typecho_Http_Client::get("Socket");
判断是否有可用的连接
if ($client) {
// 可用的连接
} else {
// 不可用的连接
}
// 比如
if (false == Typecho_Http_Client::get()) {
throw new Typecho_Plugin_Exception(_t('对不起, 您的主机不支持 php-curl 扩展而且没有打开 allow_url_fopen 功能, 无法正常使用此功能'));
}
第二步
(非必须)判断适配器是否可用
// 判断适配器是否可用
if ($client->isAvailable()) {
//可用
} else {
//不可用
}
第三步
设置请求,发送请求
(非必须)设置头信息参数
$client->setHeader($key, $value);
$client->setHeader('User-Agent', "your user-agent");
// 根据你的需要设置头
(非必须)设置需要POST的文件
// 根据你的需要设置需要POST的文件
$client->setFiles($files);
// $files是数组
(非必须)设置设置超时时间
// 根据你的需要设置超时时间
$client->setTimeout($timeout);
//$timeout 可以是10 ,30,等等,超时时间,结束。秒级
(非必须)设置方法名
// 根据你的需要设置方法名
$client->setMethod($method);
// method 可以是以下
Typecho_Http_Client::METHOD_GET
Typecho_Http_Client::METHOD_POST
(非必须)设置传递参数
// 根据你的需要设置传递参数
$client->setQuery($query);
// $query 可以是字符串,也是可以数组
// 如果是数组会构建query, http_build_query($query)
(非必须)设置需要POST的数据
// 根据你的需要设置需要POST的数据
$client->setData($data);
// $data是数组
(非必须)设置需要POST的文件
// 根据你的需要设置需要POST的文件
$client->setFiles($files);
// $files是数组
(非必须)设置http协议
// 根据你的需要设置http协议
$client->setRfc($rfc);
// $rfc是http协议,字符串
(非必须)设置ip地址
// 根据你的需要设置ip地址
$client->setIp($ip);
// $ip是ip地址,字符串
第四步
发送$url
是请求地址,注意要try
$client->send($url);
// 记得要try catch
try {
/** send */
$client->send($url);
$response = $client->getResponseBody();
// $response 获取回执身体
} catch (Typecho_Http_Client_Exception $e) {
//$e
}
第五步
(非必须)获取回执
send,后,可以获取回执
获取回执身体
$responseBody = $client->getResponseBody();
获取回执代码
$responseStatus = $client->getResponseStatus();
获取回执的头部信息
$responseHeader = $client->getResponseHeader($key);
结束
我就粗糙的写几个实例。我也是才看没多久,如有错,还请斧正。
话说ios的typecho什么时候安排一下😄😄😄😂
这个,ios版的客户端,基本上是没希望了😂
一是还没有苹果开发者账号
二是这种客户端,开发后上架难,会白折腾😁
权哥nb,现在这个更新成功率可以不
😂😂😂没读懂呀
哈哈,怪我没表述清楚,我是说更新成功率,之前不是容易失败嘛😂
现在的版本,我自己测试出是百分之百成功😂😂
这个真不错
🌝真香就对了
😂😂😂调用typecho封装的,不管你会不会curl或者socket😄😄😄