浅谈一下 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);

结束

我就粗糙的写几个实例。我也是才看没多久,如有错,还请斧正。

#none
更新于: 2020年08月07日 23:37
1038
9
发表评论
  1. 话说ios的typecho什么时候安排一下😄😄😄😂

    1. 这个,ios版的客户端,基本上是没希望了😂
      一是还没有苹果开发者账号
      二是这种客户端,开发后上架难,会白折腾😁

  2. 权哥nb,现在这个更新成功率可以不

    1. 😂😂😂没读懂呀

      1. 哈哈,怪我没表述清楚,我是说更新成功率,之前不是容易失败嘛😂

        1. 现在的版本,我自己测试出是百分之百成功😂😂

  3. 这个真不错

  4. 🌝真香就对了

    1. 😂😂😂调用typecho封装的,不管你会不会curl或者socket😄😄😄