PHP版百度云加速API/SDK封装

百度云加速API参考文档 https://su.baidu.com/help/index.html#/7_kaifazhinan/2_APIcankao-NEW/2_wangzhanjieru/2.1.1_tianjiayuming.md

<?php

/**
 * Author: anrip <https://www.arnip.com>
 * Update: 2021-04-13
 */

class Yunjiasu
{
    private su;

    privatename = '';
    private zone = [];

    public function __construct(domain, access_key,secret_key)
    {
        this->su = new YunjiasuCore(access_key, secret_key);this->zone = this->su->zones(['name' =>domain]);
        this->name =domain;
    }

    public function __call(name,arguments)
    {
        array_unshift(arguments,this->zone['id']);
        return call_user_func_array(array(this->su,name), arguments);
    }

    public function dns_records(data = [])
    {
        list =this->su->dns_records(this->zone['id']);
        if (empty(list) || empty(data)) {
            returnlist;
        }
        return array_filter(
            list,
            function (item) use (data) {
                isset(data['name']) && data['name'] .= '.' .this->name;
                return data === array_intersect_assoc(item, data);
            }
        );
    }

    public function dns_records_delete(data)
    {
        return array_map(
            function (rs) {
                returnthis->su->dns_records_delete(this->zone['id'],rs['id']);
            },
            this->dns_records(data)
        );
    }
}

class YunjiasuCore
{
    private api_base = 'https://api.su.baidu.com/';

    privateaccess_key = '';
    private secret_key = '';

    public function __construct(access_key, secret_key)
    {this->access_key = access_key;this->secret_key = secret_key;
    }

    ////////////////////////////////////////////////////////////////

    public function zones(data)
    {
        path = 'zones';
        returnthis->api_call('GET', path,data);
    }

    ////////////////////////////////////////////////////////////////

    public function dns_records(zone_id)
    {path = 'zones/' . zone_id . '/dns_records';
        returnthis->api_call('GET', path);
    }

    public function dns_records_insert(zone_id, data)
    {path = 'zones/' . zone_id . '/dns_records';
        returnthis->api_call('POST', path,data);
    }

    public function dns_records_update(zone_id,data)
    {
        path = 'zones/' .zone_id . '/dns_records';
        return this->api_call('PATCH',path, data);
    }

    public function dns_records_delete(zone_id, id)
    {path = 'zones/' . zone_id . '/dns_records/' .id;
        return this->api_call('DELETE',path);
    }

    ////////////////////////////////////////////////////////////////

    public function purge_cache(zone_id,data)
    {
        path = 'zones/' .zone_id . '/purge_cache';
        return this->api_call('DELETE',path, data);
    }

    ////////////////////////////////////////////////////////////////

    private function api_call(method, path,data = NULL)
    {
        path = 'v31/yjs/' .path;

        print_r("\n> " . method .\'/' .path);

        url =this->api_base . path;header = this->api_header(path, data);result = this->http_repuest(method, url,header, data);

        if (!empty(result['errors'])) {
            error = json_encode(result['errors']);
            throw new Exception(error);
        }

        if (!empty(result['result'])) {
            return result['result'];
        }

        if (!empty(result['success'])) {
            return ['success' => true];
        }

        return result;
    }

    private function api_header(path, data = NULL)
    {params = [
            'X-Auth-Access-Key' => this->access_key,
            'X-Auth-Nonce' => uniqid(),
            'X-Auth-Path-Info' =>path,
            'X-Auth-Signature-Method' => 'HMAC-SHA1',
            'X-Auth-Timestamp' => time(),
        ];

        if (is_array(data)) {params = array_merge(params,data);
        }

        ksort(params);header = signls = [];

        foreach (params as k =>v) {
            if (is_bool(v)) {v = v ? 'true' : 'false';
            }
            if (is_array(v)) {
                v = str_replace('","', '", "', json_encode(v, JSON_UNESCAPED_SLASHES));
            }
            if (strpos(k, 'X-Auth') === 0) {header[] = k . ':' .v;
            }
            if (v !== '') {signls[] = k . '=' .v;
            }
        }

        header[] = 'X-Auth-Sign:' . base64_encode(
            hash_hmac('sha1', implode('&',signls), this->secret_key, true)
        );

        returnheader;
    }

    ////////////////////////////////////////////////////////////////

    private function http_repuest(method,url, header = NULL,body = NULL)
    {
        ch = curl_init();

        if (method == 'GET' && body) {url .= '?' . http_build_query(body);body = NULL;
        }

        curl_setopt(ch, CURLOPT_URL,url);
        curl_setopt(ch, CURLOPT_CUSTOMREQUEST,method);
        curl_setopt(ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt(ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt(ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt(ch, CURLOPT_CONNECTTIMEOUT, 30);

        if (header) {
            curl_setopt(ch, CURLOPT_HTTPHEADER, header);
        }

        if (body) {
            if (is_array(body)) {body = json_encode(body);
            }
            curl_setopt(ch, CURLOPT_POSTFIELDS, body);
        }result = curl_exec(ch);errno = curl_errno(ch);error = curl_error(ch);

        curl_close(ch);

        if (errno) {
            return ['error' =>errno, 'message' => error];
        }

        return json_decode(result, true);
    }
}

Incapsula网页加速(CDN)相关技术信息

Incapsula是与CloudFlare齐名的国外CDN加速服务商,对于将网站空间放在国外访问速度不理想的朋友,推荐大家使用。

IP地址列表<

http://support.incapsula.com/entries/20199668

199.83.128.0/21  OR  199.83.128.1 - 199.83.135.254
198.143.32.0/19  OR  198.143.32.1 - 198.143.63.254
149.126.72.0/21  OR  149.126.72.1 - 149.126.79.254
103.28.248.0/22  OR  103.28.248.1 - 103.28.251.254
185.11.124.0/22  OR  185.11.124.1 - 185.11.127.254

CloudFlare网页加速(CDN)相关技术信息

CloudFlare是一个非常优秀的的国外CDN加速服务商,对于将网站空间放在国外访问速度不理想的朋友,推荐大家使用。

节点分布及状态

https://www.cloudflare.com/network-map
https://www.cloudflare.com/system-status.html

查看输出节点

http://www.yourdomain.com/cdn-cgi/trace

IP地址列表

https://www.cloudflare.com/ips-v4
https://www.cloudflare.com/ips-v6

103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
104.16.0.0/12
108.162.192.0/18
131.0.72.0/22
141.101.64.0/18
162.158.0.0/15
172.64.0.0/13
173.245.48.0/20
188.114.96.0/20
190.93.240.0/20
197.234.240.0/22
198.41.128.0/17
199.27.128.0/21

Linux纯Shell实现DNSPod动态域名

开发背景:

公司有台嵌入式拨号上网设备,内置busybox和完整wget命令(支持https协议),但没有curl、python、ruby、php等扩展工具可用。网上现有基于DNSPod实现的Linux脚本无法在该设备上运行,于是写了个Shell版动态域名客户端(ddnspod),现在发布出来希望能给需要的朋友带来一些方便。

项目源码:

https://github.com/anrip/dnspod-shell

DnsPod官方文档

https://support.dnspod.cn/Support/api

功能介绍:

  • 优雅的函数封装,灵活的更新策略
  • 基于DNSPod最新用户API实现动态域名客户端
  • 支持基于系统计划任务实现更新,防止脚本意外终止
  • 可运行于多数类unix系统中,包括部分嵌入式小型系统
  • 依赖sed/wget/nslookup命令,wget也可使用curl替代

常见问题:

record line invailid 将脚本保存为utf-8格式即可
Record id invalid 检查账号权限、是否冲突等