文档中心

基于OpenAPI规范的标准化技术文档枢纽,提供版本化、交互式、机器可读的API全生命周期管理解决方案。

调用次数:36 次

抖音视频解析

正常 免费

更新日期
2025-08-31
调用权限
需申请权限
每日限制
10000次
请求频率限制
1秒1次

请求限制:

免费/测试用户请求频率限制 请求频率总限制 每日请求次数总限制
1秒10次 每个免费用户的QPS总限制 1秒1次 每个用户QPS总限制 10000 (次) 每个用户每日请求总次数

其他准入要求:

  • 账户余额/点数计费的用户,不限制每日请求次数和QPS
  • 次数包计费的用户,不限制每日请求次数和QPS
  • 开发者需要联系人工客服申请该接口使用权限,并说明你的应用场景,审核通过后即时开通接口正常使用。

  • 申请接口使用权限:点击申请

    接口地址:https://api.haah.net/api/dy

    返回格式:application/json

    请求方式:HTTPGETPOST/JSON

    请求示例:https://api.haah.net/api/dy?key=你的密钥

    请求HEADER:

    名称
    Content-Typeapplication/x-www-form-urlencoded;charset:utf-8;

    请求参数说明:

    名称必填类型示例值说明
    keystring35kj5jnlj53453kl5j43nj5接口密钥,在控制台->密钥管理查看
    urlstringhttps://www.douyin.com/video/7544199978160360739需要解析的抖音视频链接
    minimalstringtrue返回数据为精简/完整模式,默认值:true即精简模式,false即完整模式

    返回参数说明:

    名称类型说明
    codeint状态码
    msgstring状态信息
    datastring请求结果数据集
    debugstring/array调试数据
    exec_timefloat执行耗时
    user_ipstring客户端IP

    返回示例:

    {

        "code": 200,

        "msg": "success",

        "data": {

            "type": "video",

            "platform": "douyin",

            "aweme_id": "7544199978160360739",

            "desc": "商务部国际贸易谈判代表兼副部长李成钢 与美国政府部门相关官员以及工商界代表举行会谈会见",

            "create_time": 1756520947,

            "author": {

                "account_cert_info": "{"label_style":7,"label_text":"环球网环视频官方账号","is_biz_account":1}",

                "avatar_thumb": {

                    "height": 720,

                    "uri": "100x100/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "awemehts_greet_info": "",

                "cf_list": null,

                "close_friend_type": 0,

                "contacts_status": 1,

                "contrail_list": null,

                "cover_url": [

                    {

                        "height": 720,

                        "uri": "c8510002be9a3a61aad2",

                        "url_list": [

                            "https://p9-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?lk3s=138a59ce&x-expires=1757833200&x-signature=3obhJB8zCUJrXL%2B1eoFcWLAE9bA%3D&from=327834062",

                            "https://p3-pc-sign.douyinpic.com/obj/c8510002be9a3a61aad2?lk3s=138a59ce&x-expires=1757833200&x-signature=oaJh%2FQWhMQkAMl%2FXLWxLrU77CsI%3D&from=327834062"

                        ],

                        "width": 720

                    }

                ],

                "create_time": 0,

                "custom_verify": "",

                "data_label_list": null,

                "endorsement_info_list": null,

                "enterprise_verify_reason": "环球网环视频官方账号",

                "favoriting_count": 92,

                "follow_status": 0,

                "follower_count": 1742190,

                "follower_list_secondary_information_struct": null,

                "follower_status": 0,

                "following_count": 0,

                "im_role_ids": null,

                "is_ad_fake": false,

                "is_blocked_v2": false,

                "is_blocking_v2": false,

                "is_cf": 0,

                "live_high_value": 0,

                "mate_add_permission": 0,

                "max_follower_count": 0,

                "nickname": "环视频",

                "offline_info_list": null,

                "personal_tag_list": null,

                "prevent_download": false,

                "risk_notice_text": "",

                "sec_uid": "MS4wLjABAAAALRX7uuohaJm3M9M3Cl1bGxdG79xVl8jBQlNrSvrzsxE",

                "secret": 0,

                "share_info": {

                    "share_desc": "",

                    "share_desc_info": "",

                    "share_qrcode_url": {

                        "height": 720,

                        "uri": "2f4b400008a01201aab8d",

                        "url_list": [

                            "https://p3-pc-sign.douyinpic.com/obj/2f4b400008a01201aab8d?lk3s=138a59ce&x-expires=1756645200&x-signature=mqy3vo3sbER7qz11TXYQUPjqCBc%3D&from=327834062",

                            "https://p9-pc-sign.douyinpic.com/obj/2f4b400008a01201aab8d?lk3s=138a59ce&x-expires=1756645200&x-signature=hsAvpnhzy9tbS%2BKa2ck2wsUP0AQ%3D&from=327834062"

                        ],

                        "width": 720

                    },

                    "share_title": "",

                    "share_title_myself": "",

                    "share_title_other": "",

                    "share_url": "",

                    "share_weibo_desc": ""

                },

                "short_id": "3503064783",

                "signature": "在这里看世界!",

                "signature_extra": null,

                "special_follow_status": 0,

                "special_people_labels": null,

                "status": 1,

                "story_interactive": 0,

                "story_ring": {

                    "story_rings": [],

                    "version": 1756623995

                },

                "story_ttl": 0,

                "text_extra": null,

                "total_favorited": 63877981,

                "uid": "276702230228423",

                "unique_id": "huanshipin",

                "user_age": 7,

                "user_canceled": false,

                "user_permissions": null,

                "verification_type": 1

            },

            "music": {

                "album": "",

                "artist_user_infos": null,

                "artists": [],

                "audition_duration": 12,

                "author": "环视频",

                "author_deleted": false,

                "author_position": null,

                "author_status": 1,

                "avatar_large": {

                    "height": 720,

                    "uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "avatar_medium": {

                    "height": 720,

                    "uri": "720x720/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "avatar_thumb": {

                    "height": 720,

                    "uri": "100x100/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "binded_challenge_id": 0,

                "can_background_play": true,

                "collect_stat": 0,

                "cover_hd": {

                    "height": 720,

                    "uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "cover_large": {

                    "height": 720,

                    "uri": "1080x1080/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "cover_medium": {

                    "height": 720,

                    "uri": "720x720/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "cover_thumb": {

                    "height": 720,

                    "uri": "100x100/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a",

                    "url_list": [

                        "https://p3-pc.douyinpic.com/aweme/100x100/aweme-avatar/tos-cn-avt-0015_a325cfe24e75c017555dcef6af9dfe7a.jpeg?from=327834062"

                    ],

                    "width": 720

                },

                "dmv_auto_show": false,

                "dsp_status": 10,

                "duration": 12,

                "end_time": 0,

                "external_song_info": [],

                "extra": "{"extract_item_id":7544199978160360739,"is_aed_music":1,"original_song_url":"https://sf3-sign.douyinstatic.com/ies-music-hj/7544200027715980091.mp3?lk3s=08d74b56&x-expires=1756710395&x-signature=dow68YZG0Xw%2FRuDw335Vvz9Xxys%3D","schedule_search_time":0,"hotsoon_review_time":-1,"music_tagging":{"Languages":["non_vocal"],"Moods":["Tense"],"Genres":["BGM","Others"],"Themes":["Current News"],"AEDs":["non_vocal"],"SingingVersions":["High Quality"],"Instruments":null},"is_subsidy_exp":false,"music_label_id":null,"uniqa_speech_score":0.06,"filter_reason":"gov_takedown","reviewed":0,"douyin_beats_info":{},"is_red":0,"aggregate_exempt_conf":[],"with_aed_model":1,"aed_singing_score":0.01,"hit_high_follow_original":false,"original_song_uri":"ies-music-hj/7544200027715980091.mp3","has_edited":0,"review_unshelve_reason":0,"beats":{},"cover_colors":null,"aed_music_score":0.97,"dsp_switch":0,"is_high_follow_user":false,"hit_high_follow_extend":false,"hit_high_follow_auto":false}",

                "id": 7544199993945426738,

                "id_str": "7544199993945426738",

                "is_audio_url_with_cookie": false,

                "is_commerce_music": false,

                "is_del_video": false,

                "is_exempt_for_reply": true,

                "is_matched_metadata": false,

                "is_original": false,

                "is_original_sound": true,

                "is_pgc": false,

                "is_restricted": false,

                "is_video_self_see": false,

                "lyric_short_position": null,

                "mid": "7544199993945426738",

                "music_chart_ranks": null,

                "music_collect_count": 0,

                "music_cover_atmosphere_color_value": "",

                "music_status": 0,

                "musician_user_infos": null,

                "mute_share": false,

                "offline_desc": "该声音不可用",

                "owner_handle": "huanshipin",

                "owner_id": "276702230228423",

                "owner_nickname": "环视频",

                "pgc_music_type": 2,

                "play_url": {

                    "height": 720,

                    "uri": "",

                    "url_key": "7544199993945426738",

                    "url_list": [],

                    "width": 720

                },

                "position": null,

                "prevent_download": false,

                "prevent_item_download_status": 0,

                "preview_end_time": 0,

                "preview_start_time": 0,

                "reason_type": 2,

                "redirect": false,

                "schema_url": "",

                "search_impr": {

                    "entity_id": "7544199993945426738"

                },

                "sec_uid": "MS4wLjABAAAALRX7uuohaJm3M9M3Cl1bGxdG79xVl8jBQlNrSvrzsxE",

                "shoot_duration": 12,

                "show_origin_clip": false,

                "source_platform": 23,

                "start_time": 0,

                "status": 1,

                "tag_list": null,

                "title": "@环视频创作的原声",

                "unshelve_countries": null,

                "user_count": 0,

                "video_duration": 12

            },

            "statistics": {

                "admire_count": 0,

                "aweme_id": "7544199978160360739",

                "collect_count": 543,

                "comment_count": 158,

                "digg_count": 3568,

                "play_count": 0,

                "recommend_count": 236,

                "share_count": 351

            },

            "cover_data": {

                "cover": {

                    "height": 720,

                    "uri": "image-cut-tos-priv/4e81880df9a7fcc09eeb3d2bf3ecf7f1",

                    "url_list": [

                        "https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/4e81880df9a7fcc09eeb3d2bf3ecf7f1~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2071983600&x-signature=B44uGmnq0I4czdveeA3d88GvOQQ%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202508311506340B4C0FB15DC04FF014DB",

                        "https://p9-pc-sign.douyinpic.com/image-cut-tos-priv/4e81880df9a7fcc09eeb3d2bf3ecf7f1~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2071983600&x-signature=fMCswMWgJuFWKReYnl3cYH4TkbA%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=202508311506340B4C0FB15DC04FF014DB"

                    ],

                    "width": 720

                },

                "origin_cover": {

                    "height": 640,

                    "uri": "tos-cn-p-0015/o4QDQgD9CAWmo1D0AogFpsfQQfwiooEB9BH8kA",

                    "url_list": [

                        "https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/o4QDQgD9CAWmo1D0AogFpsfQQfwiooEB9BH8kA~tplv-dy-360p.jpeg?lk3s=138a59ce&x-expires=1757833200&x-signature=zRhSUWuKI2mTS%2Bde2So0Sy8Y1UA%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202508311506340B4C0FB15DC04FF014DB",

                        "https://p9-pc-sign.douyinpic.com/tos-cn-p-0015/o4QDQgD9CAWmo1D0AogFpsfQQfwiooEB9BH8kA~tplv-dy-360p.jpeg?lk3s=138a59ce&x-expires=1757833200&x-signature=6QVG%2F5fHRrUEySLF8NM1x9ppjwc%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=origin_cover&biz_tag=pcweb_cover&l=202508311506340B4C0FB15DC04FF014DB"

                    ],

                    "width": 360

                },

                "dynamic_cover": {

                    "height": 720,

                    "uri": "tos-cn-i-dy/9d355ae5ac6946248a3384d8ae365857",

                    "url_list": [

                        "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/9d355ae5ac6946248a3384d8ae365857?lk3s=138a59ce&x-expires=1757833200&x-signature=mAtD2OMHa7UBzA6U0jCrPfo0t2Q%3D&from=327834062_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202508311506340B4C0FB15DC04FF014DB",

                        "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/9d355ae5ac6946248a3384d8ae365857?lk3s=138a59ce&x-expires=1757833200&x-signature=GqtueREizhmJRZMcw3Ecc4QgBRU%3D&from=327834062_large&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202508311506340B4C0FB15DC04FF014DB"

                    ],

                    "width": 720

                }

            },

            "hashtags": [

                {

                    "end": 0,

                    "search_query_id": "6581989934096192775",

                    "search_text": "李成钢",

                    "start": 0,

                    "type": 5

                }

            ],

            "video_data": {

                "wm_video_url": "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fg10000d2p63q7og65ua7m5kko0&radio=1080p&line=0",

                "wm_video_url_HQ": "https://v26-web.douyinvod.com/6a4db3053d29da6dfe78eed13cb611da/68b41eb7/video/tos/cn/tos-cn-ve-15/oMf9YmoDsBAFxRwINEaV8WAMUoHgxoHeDA9yEu/?a=6383&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=550&bt=550&cs=0&ds=4&ft=pEaFx4hZffPdO.~SN1jNvAq-antLjrK1tqKCRkau2poaejVhWL6&mime_type=video_mp4&qs=0&rc=ZjQ7Z2g1M2hkOTU5NzhmO0BpM244Ong5cnQ5NTMzNGkzM0A1Yy4uYC4wNS8xYTFjXjY0YSNsaGpeMmQ0MG1hLS1kLTBzcw%3D%3D&btag=c0000e00008000&cquery=100H_100K_100o_100w_100B&dy_q=1756623995&feature_id=0ea98fd3bdc3c6c14a3d0804cc272721&l=202508311506340B4C0FB15DC04FF014DB",

                "nwm_video_url": "https://aweme.snssdk.com/aweme/v1/play/?video_id=v0300fg10000d2p63q7og65ua7m5kko0&ratio=1080p&line=0",

                "nwm_video_url_HQ": "https://v26-web.douyinvod.com/6a4db3053d29da6dfe78eed13cb611da/68b41eb7/video/tos/cn/tos-cn-ve-15/oMf9YmoDsBAFxRwINEaV8WAMUoHgxoHeDA9yEu/?a=6383&ch=26&cr=3&dr=0&lr=all&cd=0%7C0%7C0%7C3&cv=1&br=550&bt=550&cs=0&ds=4&ft=pEaFx4hZffPdO.~SN1jNvAq-antLjrK1tqKCRkau2poaejVhWL6&mime_type=video_mp4&qs=0&rc=ZjQ7Z2g1M2hkOTU5NzhmO0BpM244Ong5cnQ5NTMzNGkzM0A1Yy4uYC4wNS8xYTFjXjY0YSNsaGpeMmQ0MG1hLS1kLTBzcw%3D%3D&btag=c0000e00008000&cquery=100H_100K_100o_100w_100B&dy_q=1756623995&feature_id=0ea98fd3bdc3c6c14a3d0804cc272721&l=202508311506340B4C0FB15DC04FF014DB"

            }

        },

        "exec_time": 0.104277,

        "ip": "",

        "request_id": "4f4ed1a463f53fe5f37bd92dc664206a"

    }


    错误码类型说明
    403int没有权限
    400int参数传递不正确
    500int服务器内部错误
    
    <?php
    /**
     * API请求DEMO
     * 
     * 本demo支持常见的HTTP请求方法(GET/POST/PUT/DELETE等)
     */
    
     //基本配置
    $api_key = '你的接口密钥,登录控制台后在密钥管理页面申请';
    $secret_key = '';
    
    // API请求示例:
    try {
        $client = new ApiClient($api_key, $secret_key);
        $client->setTimeout(10);
        $client->setVerifySSL(false); // 关闭SSL验证
    
        // GET请求示例
        echo "=== 开始GET请求 ===\n";
        $response = $client->get('https://api.haah.net/api/dy', [
            'key' => $api_key,
            'key2' => '其他参数'
        ]);
        print_r($response);
        //print_r($client->getLastRequestInfo());
        /* 
        // POST表单示例
        echo "\n=== 开始POST请求 ===\n";
        $response = $client->post('接口地址', [
            'key' => $api_key,
            'key2' => '其他参数'
        ]);
        print_r($response);
        print_r($client->getLastRequestInfo());
    
        // POST JSON示例
        echo "\n=== 开始POST JSON请求 ===\n";
        $response = $client->postJson('接口地址', [
            'key' => $api_key,
            'key2' => '其他参数'
        ]);
        print_r($response);
        print_r($client->getLastRequestInfo());
         */
    } catch (ApiClientException $e) {
        echo "API请求错误: " . $e->getMessage();
        if ($e->getCode() > 0) {
            echo " (HTTP状态码: " . $e->getCode() . ")";
        }
        print_r($client->getLastRequestInfo() ?? []);
    }
    
    /**
     * API客户端类
     * 
     * 提供了一个简单的HTTP API客户端实现,支持常见的HTTP请求方法(GET/POST/PUT/DELETE等)
     * 具有以下主要功能:
     * - 支持 API 密钥和签名认证
     * - 可配置请求超时和SSL验证
     * - 支持自定义请求头
     * - 支持表单和JSON格式的请求体
     * - 自动解析响应结果
     * - 提供详细的请求信息记录
     * 
     * 使用示例:
     * ```
     * $client = new ApiClient('https://api.example.com', 'api_key', 'secret_key');
     * $response = $client->get('/users', ['page' => 1]);
     * ```
     * 
     * @throws ApiClientException 当API请求失败时抛出异常
     */
    class ApiClient
    {
        private $apiKey;
        private $secretKey;
        private $timeout = 30;
        private $verifySSL = true;
        private $lastRequestInfo = [];
        private $defaultHeaders = [];
    
        /**
         * 构造函数
         * 
         * @param string $apiKey  API密钥(可选)
         * @param string $secretKey 签名密钥(可选)
         */
        public function __construct(string $apiKey = '', string $secretKey = '')
        {
            $this->apiKey = $apiKey;
            $this->secretKey = $secretKey;
        }
    
        /**
         * 设置请求超时时间(秒)
         */
        public function setTimeout(int $seconds): self
        {
            $this->timeout = $seconds;
            return $this;
        }
    
        /**
         * 设置是否验证SSL证书
         */
        public function setVerifySSL(bool $verify): self
        {
            $this->verifySSL = $verify;
            return $this;
        }
    
        /**
         * 添加默认请求头
         */
        public function addDefaultHeader(string $name, string $value): self
        {
            $this->defaultHeaders[$name] = $value;
            return $this;
        }
    
        /**
         * 发送GET请求
         * 
         * @param string $endpoint 接口端点
         * @param array  $query    查询参数
         * @param array  $headers  额外请求头
         */
        public function get(string $endpoint, array $query = [], array $headers = []): array
        {
            return $this->request('GET', $endpoint, [
                'query' => $query,
                'headers' => $headers
            ]);
        }
    
        /**
         * 发送POST请求(表单格式)
         * 
         * @param string $endpoint 接口端点
         * @param array  $data     POST数据
         * @param array  $headers  额外请求头
         */
        public function post(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('POST', $endpoint, [
                'form_data' => $data,
                'headers' => $headers
            ]);
        }
    
        /**
         * 发送POST请求(JSON格式)
         * 
         * @param string $endpoint 接口端点
         * @param array  $data     POST数据
         * @param array  $headers  额外请求头
         */
        public function postJson(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('POST', $endpoint, [
                'json' => $data,
                'headers' => array_merge(['Content-Type' => 'application/json'], $headers)
            ]);
        }
    
        /**
         * 发送PUT请求
         */
        public function put(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('PUT', $endpoint, [
                'json' => $data,
                'headers' => $headers
            ]);
        }
    
        /**
         * 发送DELETE请求
         */
        public function delete(string $endpoint, array $data = [], array $headers = []): array
        {
            return $this->request('DELETE', $endpoint, [
                'json' => $data,
                'headers' => $headers
            ]);
        }
    
        /**
         * 获取最后一次请求的详细信息
         */
        public function getLastRequestInfo(): array
        {
            return $this->lastRequestInfo;
        }
    
        /**
         * 基础请求方法
         */
        private function request(string $method, string $endpoint, array $options = []): array
        {
            // 初始化cURL
            $ch = curl_init();
            $url = ltrim($endpoint, '/');
    
            // 准备请求头
            $headers = $this->prepareHeaders($options['headers'] ?? []);
    
            // 处理查询参数
            if (!empty($options['query'])) {
                $url .= '?' . http_build_query($options['query']);
            }
    
            // 处理请求体
            $postData = null;
            if (isset($options['form_data'])) {
                $postData = http_build_query($options['form_data']);
                $headers[] = 'Content-Type: application/x-www-form-urlencoded';
            } elseif (isset($options['json'])) {
                $postData = json_encode($options['json']);
                $headers[] = 'Content-Type: application/json';
            }
    
            // 设置cURL选项
            curl_setopt_array($ch, [
                CURLOPT_URL => $url,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_CUSTOMREQUEST => $method,
                CURLOPT_HTTPHEADER => $headers,
                CURLOPT_TIMEOUT => $this->timeout,
                CURLOPT_SSL_VERIFYPEER => $this->verifySSL,
                CURLOPT_SSL_VERIFYHOST => $this->verifySSL,
                CURLOPT_HEADER => true,
            ]);
    
            if ($method !== 'GET' && $postData !== null) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
            }
    
            // 执行请求
            $response = curl_exec($ch);
            $error = curl_error($ch);
            $info = $this->lastRequestInfo = curl_getinfo($ch);
            curl_close($ch);
    
            // 处理错误
            if ($error) {
                throw new ApiClientException("cURL请求失败: " . $error);
            }
    
            // 分离响应头和响应体
            $headerSize = $info['header_size'];
            $responseHeaders = substr($response, 0, $headerSize);
            $responseBody = substr($response, $headerSize);
    
            // 解析响应
            $result = json_decode($responseBody, true) ?? $responseBody;
    
            // 检查HTTP状态码
            if ($info['http_code'] >= 400) {
                $errorMsg = is_array($result) ? ($result['message'] ?? $responseBody) : $responseBody;
                throw new ApiClientException("API请求失败: " . $errorMsg, $info['http_code']);
            }
    
            return [
                'status' => $info['http_code'],
                'headers' => $this->parseHeaders($responseHeaders),
                'data' => $result
            ];
        }
    
        /**
         * 准备请求头(自动添加签名)
         */
        private function prepareHeaders(array $headers): array
        {
            // 合并默认头
            $headers = array_merge($this->defaultHeaders, $headers);
    
            // 添加签名头
            if ($this->apiKey && $this->secretKey) {
                $timestamp = time();
                $signString = "key={$this->apiKey}&timestamp={$timestamp}";
                $signature = hash_hmac('sha256', $signString, $this->secretKey);
    
                $headers['X-Api-Key'] = $this->apiKey;
                $headers['X-Api-Timestamp'] = $timestamp;
                $headers['X-Api-Sign'] = $signature;
            }
    
            // 转换为cURL格式
            $curlHeaders = [];
            foreach ($headers as $name => $value) {
                $curlHeaders[] = "$name: $value";
            }
    
            return $curlHeaders;
        }
    
        /**
         * 解析响应头
         */
        private function parseHeaders(string $headers): array
        {
            $parsed = [];
            foreach (explode("\r\n", $headers) as $i => $line) {
                if ($i === 0) {
                    $parsed['HTTP_CODE'] = $line;
                } else {
                    $parts = explode(': ', $line, 2);
                    if (count($parts) === 2) {
                        $parsed[$parts[0]] = $parts[1];
                    }
                }
            }
            return $parsed;
        }
    }
    
    class ApiClientException extends \Exception
    {
        // 自定义异常类
    }
    
    
    
    
    
    
    //jQuery-Ajax
    $.ajax({
    	url: 'https://api.haah.net/api/dy',
    	data: {
    	//接口参数,一行一个,可按照接口文档-请求参数 的参数填写,或者直接复制开发工具下面的测试代码。
    		key: '你的接口密钥,登录控制台后在密钥管理页面申请',
    		参数名: '参数值',
    
    	},
    	type: 'GET', //请求协议(GET或POST),一般默认GET,部分接口需要POST请求,根据实际情况修改为POST即可。
    	dataType: 'json',
    	success: function(data) {
    		console.log(data); //请求成功,输出结果到控制台
    	},
    	timeout: 3000, //超时时间
    	error: function(data) {
    		console.log('请求失败'); //失败处理
    	}
    });
    
    
    
        
    子程序名 返回值类型 公开 备 注
    __启动窗口_创建完毕    
    ' 添加并使用《精易模块》
    Send_API ()
    子程序名 返回值类型 公开 备 注
    Send_API    
    变量名 类 型 静态 数组 备 注
    REQU_Data 文本型   提交字符串
    return 文本型   返回字符串
    API_URL 文本型   接口地址
    API_KEY 文本型   接口密钥
    API_URL = “https://api.haah.net/api/dy”
    API_KEY = “你的接口密钥,登录控制台后在密钥管理页面申请”
    REQU_Data = "请求参数,根据接口文档的请求参数来拼接字符串(例a=a&b=b&c=c)"
    return = 编码_Utf8到Ansi (网页_访问 (API_URL + “?key=” + API_KEY + REQU_Data, , , , , “User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36”))
    输出调试文本 (return)
    
    import java.io.BufferedReader; 
    import java.io.InputStreamReader; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 
     
    public class Test { 
        public static void main(String[] args) { 
            try { 
                URL url = new URL("https://api.haah.net/api/dy?key=你的接口密钥,登录控制台后在密钥管理页面申请"); 
                HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
     
                // 设置请求方式
                connection.setRequestMethod("GET"); 
                connection.connect(); 
     
                // 获取响应码
                int responseCode = connection.getResponseCode(); 
                if (responseCode == HttpURLConnection.HTTP_OK) { 
                    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
                    String line; 
                    while ((line = reader.readLine()) != null) { 
                        // 读取到的内容给line变量 
                        System.out.println(line); 
                    } 
                    reader.close(); 
                } 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
    }
    
    
    
    package main
     
    import (
        "fmt"
        "io/ioutil"
        "net/http"
    )
     
    func main() {
        // 发起一个GET请求
        resp, err := http.Get("https://api.haah.net/api/dy?key=你的接口密钥,登录控制台后在密钥管理页面申请")
        if err != nil {
            fmt.Println("http get error", err)
            return
        }
     
        // 读取响应结果
        result, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            fmt.Println("http read error", err)
            return
        }
     
        // 关闭响应结果
        defer resp.Body.Close()
     
        fmt.Println(string(result))
    }
    
    
    
    ```
    # 导入requests库
    import requests
     
    # 设置url
    url = 'https://api.haah.net/api/dy?key=你的接口密钥,登录控制台后在密钥管理页面申请'
     
    # 发送post请求
    response = requests.post(url, data={'key1': 'value1', 'key2': 'value2'})
     
    # 获取响应内容
    result = response.json()
     
    # 打印结果
    print(result)
    ```
    
    
    // 以下是使用Node.js进行GET和POST请求API接口的示例代码:
    
    const https = require('https');
    const querystring = require('querystring');
    
    // 定义请求选项
    const options = {
      hostname: 'api.haah.net',
      path: '/api/dy',
      method: 'GET'
    };
    
    // 发送GET请求
    https.get(options, res => {
      console.log(`statusCode: ${res.statusCode}`);
    
      res.on('data', d => {
        process.stdout.write(d);
      });
    }).on('error', error => {
      console.error(error);
    });
    
    // 发送POST请求
    const postData = querystring.stringify({
      'key1': 'value1',
      'key2': 'value2'
    });
    
    const postOptions = {
      hostname: 'api.haah.net',
      path: '/api/dy',
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': Buffer.byteLength(postData)
      }
    };
    
    const postReq = https.request(postOptions, res => {
      console.log(`statusCode: ${res.statusCode}`);
    
      res.on('data', d => {
        process.stdout.write(d);
      });
    });
    
    postReq.on('error', error => {
      console.error(error);
    });
    
    postReq.write(postData);
    postReq.end();
    /*
    这个示例代码使用Node.js内置的`https`模块进行HTTP请求。
    
    首先定义了一个GET请求的选项,然后使用`https.get()`方法发送了GET请求。在响应流上注册回调函数,以便在收到响应数据时将其输出到控制台。在出现错误时,也注册了错误处理程序。
    
    类似地,我们也定义了一个POST请求选项,并使用`https.request()`方法发送它。需要在请求头中包含适当的`Content-Type`和`Content-Length`以确保服务器可以正确解析请求体。请求体由`write()`方法写入,并在请求结束时通过调用`end()`方法通知请求对象已经完成。
    
    注意,此示例默认使用`querystring`模块将数据作为x-www-form-urlencoded格式进行编码。如果需要使用其他格式(如JSON),则需要相应地更改请求头和请求体的编码方式。
    
    另外,为了确保HTTPS请求的安全性,您也可以添加其他选项,例如验证服务器证书、设置代理等。
    */
    
    
    
    
    
    
    以下是使用C语言进行GET和POST请求API接口的示例代码:
    
    ``` c
    #include 
    #include 
    #include 
    #include  // 需要安装curl库
    
    // API地址
    const char* url = "https://api.haah.net/api/dy";
    
    // GET请求
    void getRequest(CURL* curl) {
        CURLcode res;
    
        // 设置URL
        curl_easy_setopt(curl, CURLOPT_URL, url);
    
        // 执行请求
        res = curl_easy_perform(curl);
    
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        }
    }
    
    // POST请求
    void postRequest(CURL* curl) {
        CURLcode res;
    
        // 设置URL
        curl_easy_setopt(curl, CURLOPT_URL, url);
    
        // 设置POST数据
        const char* postData = "key=你的接口密钥,登录控制台后在密钥管理页面申请&key1=value1";
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);
    
        // 执行请求
        res = curl_easy_perform(curl);
    
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        }
    }
    
    int main() {
        CURL* curl;
        CURLcode res;
    
        // 初始化curl
        curl = curl_easy_init();
    
        if(curl) {
            // 设置SSL验证
            curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
    
            // GET请求
            getRequest(curl);
    
            // POST请求
            postRequest(curl);
    
            // 清理curl资源
            curl_easy_cleanup(curl);
        }
    
        return 0;
    }
    ```
    
    这个示例代码使用了libcurl库进行HTTP请求。
    
    首先,需要设置API地址。然后,基于`CURL`结构体创建curl句柄,并使用`curl_easy_setopt()`函数设置选项。这里设置了SSL验证,以确保请求的安全性。
    
    在GET请求中,只需将URL设置为选项,然后调用`curl_easy_perform()`函数执行请求即可。
    
    在POST请求中,还需要将POST数据作为字符串传递给`CURLOPT_POSTFIELDS`选项。
    
    需要注意的是,为了避免内存泄漏,应该在使用完curl句柄之后调用`curl_easy_cleanup()`函数进行清理。
    
    除了上述示例代码外,libcurl库还提供了更多高级选项,例如处理HTTP头、上传文件等。可以参考文档进行更详细的了解。
    
    
    
    
    以下是一个使用C++请求API接口的示例代码:
    
    ```cpp
    #include 
    #include 
    
    int main() {
        CURL *curl;
        CURLcode res;
        std::string url = "https://api.haah.net/api/dy?key=你的接口密钥,登录控制台后在密钥管理页面申请";
        std::string response;
    
        curl = curl_easy_init();
        if (curl) {
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [](char *ptr, size_t size, size_t nmemb, void *userdata) -> size_t {
                std::string *response = reinterpret_cast(userdata);
                response->append(ptr, size * nmemb);
                return size * nmemb;
            });
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
    
            res = curl_easy_perform(curl);
            if (res == CURLE_OK) {
                std::cout << "Response: " << response << std::endl;
            } else {
                std::cerr << "Error: " << curl_easy_strerror(res) << std::endl;
            }
            curl_easy_cleanup(curl);
        }
    
        return 0;
    }
    ```
    
    解释:
    
    1. 引入需要的头文件:``用于输出结果,``用于使用libcurl库。
    
    2. 定义需要请求的API接口的URL和存储响应数据的字符串变量。
    
    3. 初始化一个CURL对象。
    
    4. 设置CURL对象的参数:请求的URL(`CURLOPT_URL`)、是否跟随重定向(`CURLOPT_FOLLOWLOCATION`)、响应数据的写入函数(`CURLOPT_WRITEFUNCTION`)和响应数据的写入位置(`CURLOPT_WRITEDATA`)。
    
    5. 发送HTTP请求并获取响应数据,判断返回状态码是否OK。
    
    6. 清理CURL对象。
    
    运行该程序会发送GET请求到指定的API接口URL,并在程序终止前将响应数据输出到终端。注意,在使用该示例代码之前需要安装libcurl库。
    
    
    
    
    以下是一个使用C#请求API接口的示例代码:
    
    ```csharp
    using System;
    using System.Net.Http;
    using System.Threading.Tasks;
    
    class Program {
        static async Task Main(string[] args) {
            HttpClient client = new HttpClient();
            string url = "https://api.haah.net/api/dy?key=你的接口密钥,登录控制台后在密钥管理页面申请";
            HttpResponseMessage response = await client.GetAsync(url);
            if (response.IsSuccessStatusCode) {
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine("Response: " + responseBody);
            } else {
                Console.WriteLine("Error: " + response.StatusCode);
            }
        }
    }
    ```
    
    解释:
    
    1. 引用需要的命名空间:`System.Net.Http`用于使用HttpClient类,`System.Threading.Tasks`用于异步执行请求操作。
    
    2. 创建一个HttpClient对象。
    
    3. 定义需要请求的API接口的URL。
    
    4. 发送GET请求到指定的API接口URL,并获取响应结果。
    
    5. 判断响应状态是否成功,如果成功则读取响应数据(使用ReadAsStringAsync方法),否则输出错误信息(使用StatusCode属性)。
    
    运行该程序会发送GET请求到指定的API接口URL,并在程序终止前将响应数据输出到终端。注意,在使用该示例代码之前需要安装.NET Framework或.NET Core SDK。
    
    
    
    
    以下是VB请求API接口的示例代码:
    
    ```
    ' 1. 引入Microsoft XML v6.0库
    ' 2. 创建一个XMLHTTP对象
    Dim xhr As XMLHTTP
    Set xhr = New XMLHTTP
    
    ' 3. 设置请求的URL、方法,以及是否异步等
    xhr.Open "GET", "https://api.haah.net/api/dy?key=你的接口密钥,登录控制台后在密钥管理页面申请", False
    
    ' 4. 发送请求
    xhr.send
    
    ' 5. 获取响应结果
    Dim responseText As String
    responseText = xhr.responseText
    
    ' 6. 输出响应结果
    Debug.Print responseText
    
    ' 7. 释放资源
    Set xhr = Nothing
    ```
    
    在这个示例中,我们创建了一个XMLHTTP对象,用于请求API接口。我们先调用`open`方法来设置请求的URL、方法,以及是否异步。然后,我们发送请求,并使用`responseText`属性来获取响应结果。最后,我们将响应结果打印到控制台,完成操作后释放资源,以防止内存泄漏。请注意,以上示例代码为同步请求,如果想使用异步请求,需要设置第三个参数为`True`,并在请求结束时处理`OnReadyStateChange`事件。
    
    参数名 填写参数值
    评论0
    未登录

    登录 后发表评论

    仅需三步即可快速接入

    1
    在线调试

    填写业务相关参数免费在线调试

    2
    生成代码

    生成符合你的开发语言代码,复制即可

    3
    业务上线

    调整你后端部分逻辑代码即可上线使用

    数据驱动未来

    立即注册

    客服微信

    请打开手机微信,扫一扫联系我们

    联系我们
    在线咨询
    点击咨询

    工作时间:8:00-24:00

    返回顶部