二. 身份驗證的必要性

某些API要求在請求中提供 auth-token(身份驗證令牌)。
通常,API文檔會說明如何生成 auth-token,例如通過提交 client_idclient_secretgrant_type

1. PHP生成auth-token示例

文件命名為 api/auth.php

$curl = curl_init();
$auth_data = array(
    'client_id' => 'XBnKaywRCrj05mM-XXX-6DXuZ3FFkUgiw45',
    'client_secret' => 'btHTWVNMUATHEnF-XXX-2nQabKcKVo3VXtU',
    'grant_type' => 'client_credentials'
);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $auth_data);
curl_setopt($curl, CURLOPT_URL, 'https://api-site.com/oauth/token');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$result = curl_exec($curl);
if (!$result) {
    die("Connection Failure");
}
curl_close($curl);
echo $result;

注意:auth-token可能有時效限制(如兩周),并且限制同時有效的數量。

2. JavaScript調用PHP生成auth-token

const apiAuth = async () => {
    try {
        const response = await fetch('https://my-site.com/api/auth.php');
        if (response.ok) {
            return response.json();
        }
        throw new Error(apiAuth_response: ${response});
    } catch (error) {
        console.error(apiAuth: ${error});
    }
};

三. cURL GET請求(帶身份驗證)

在GET請求中,通常將auth-token作為參數附加到URL:

if (isset($_POST['access_token'])) {
    $app_key = 'XBnKaywRCrj05m-XXX-v6DXuZ3FFkUgiw45';
    $utoken = $_POST['access_token'];
    $url = 'https://api-site.com/v1/apps/' . $app_key . '/reviews?utoken=' . $utoken;

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    $result = curl_exec($curl);
    if (!$result) {
        die("Connection Failure");
    }
    curl_close($curl);
    echo $result;
}

JavaScript調用GET請求示例

const getAllReviews = async () => {
    const auth = await apiAuth();
    const data = {
        access_token: auth.access_token,
        token_type: auth.token_type,
    };
    try {
        $.post({
            type: 'POST',
            url: 'http://my-site.com/api/get_all_reviews.php',
            data: data,
        }).success(res => {
            const data = JSON.parse(res);
            const reviews = data.reviews;
            displayAllReviews(reviews, $('.review-list'));
        });
    } catch (error) {
        console.error(getAllReviews: ${error});
    }
};

displayAllReviews為自定義函數,用于處理和展示評論數據。


四. cURL POST請求(帶身份驗證)

POST請求同樣需要auth-token,示例PHP文件 post_review.php

if (isset($_POST['success'])) {
    $p_url = 'https://product-link.com';
    $email = $_POST['email'];
    $post_array = array(
        'appkey' => 'XBnKaywRCrj05m-XXX-v6DXuZ3FFkUgiw45',
        'domain' => 'https://api-site.com',
        'product_url' => $p_url,
        'email' => $email,
        'review_content' => $_POST['message'],
        'review_title' => $_POST['title'],
        'review_score' => $_POST['star_rating_value']
    );
    postReview($post_array);
} else {
    $response = array(
        'response' => 'error',
        'message' => 'POST is required to use this function'
    );
}

function postReview($post_array) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_array);
    curl_setopt($curl, CURLOPT_URL, 'https://api-site.com/v1/reviews');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    $result = curl_exec($curl);
    if (!$result) {
        die("Connection Failure");
    }
    curl_close($curl);
    echo $result;
}

JavaScript調用POST請求

function postSiteReview(data, form) {
    $.ajax({
        url: 'https://my-site.com/api/post_review.php',
        type: 'post',
        data: data,
        success: function (result) {
            let res = JSON.parse(result);
            if (res.code === 200) {
                form.find('.success-message').fadeIn();
            } else {
                let message = res.response === 'error' ? res.message : '';
                if (res.status && res.status.code === 500) {
                    message = res.status.message;
                }
                $('p.error-msg').text(Uh ooh.. ${message});
            }
        },
        error: function (err) {
            console.log('$.ajax error: ' + err);
        }
    });
}

五. 跨域問題處理

如果PHP文件和前端位于不同域名,可能會遇到 CORS 問題。解決方法:

header("Access-Control-Allow-Origin: https://my-site.com");

允許指定域名訪問PHP文件,避免跨域錯誤。


六. 總結

通過本文示例,您已掌握:

無論是構建內部系統還是與第三方API集成,這些方法都能確保安全高效的數據交互。

原文鏈接: https://weichie.com/blog/php-curl-api-calls-authentication/

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
返回頂部
上一篇
Python調用AI寫作 API: 自動生成博客文章的智能方案
下一篇
SSIS REST API 分頁全指南:URL、響應屬性與請求體分頁實戰
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
91久久久免费一区二区| 国产成人自拍高清视频在线免费播放| 天天综合网天天综合色| 成人午夜激情片| 国产精品天美传媒沈樵| 国产午夜亚洲精品理论片色戒| 亚洲福利一区二区三区| 色综合色狠狠综合色| 亚洲欧洲成人精品av97| 91官网在线免费观看| 日本不卡的三区四区五区| 久久日一线二线三线suv| 懂色中文一区二区在线播放| 国产日韩一级二级三级| 91啪九色porn原创视频在线观看| 国产精品毛片无遮挡高清| 91麻豆精品国产无毒不卡在线观看| 国产乱人伦精品一区二区在线观看| 国产亚洲婷婷免费| 91精品国产品国语在线不卡| 91在线视频免费91| 国产福利91精品一区| 欧美一二三区在线观看| 国产精品亚洲午夜一区二区三区 | 精品国产免费人成电影在线观看四季| 毛片av中文字幕一区二区| 国产精品成人免费在线| 在线亚洲一区观看| 亚洲国产综合色| 中文字幕日韩精品一区| 久久亚洲综合色一区二区三区| 91蜜桃在线免费视频| 91婷婷韩国欧美一区二区| 不卡的电视剧免费网站有什么| a亚洲天堂av| 欧美裸体bbwbbwbbw| 欧美高清一级片在线| 欧美精品一区二区三区很污很色的 | 日本成人在线不卡视频| 午夜精品久久久久久久99水蜜桃| 一区二区高清在线| 久久久蜜臀国产一区二区| 国产成人精品三级麻豆| 国产一区二区三区电影在线观看| 国产91丝袜在线观看| 日韩三级中文字幕| 欧美成人猛片aaaaaaa| 欧美精品在线一区二区| 欧美精品久久天天躁| 国产精品视频在线看| 亚洲一级二级三级在线免费观看| 日韩av一区二区三区四区| a级高清视频欧美日韩| 日韩一二在线观看| 午夜精品久久久| 91成人免费在线| 国产日产精品一区| 91久久线看在观草草青青| 国产精品一区不卡| 欧美一区二区三区在线电影| 久久久久青草大香线综合精品| 99精品国产91久久久久久| 久久久久久久久久久电影| 精品一区免费av| 国产精品麻豆99久久久久久| 成人深夜福利app| 日韩国产成人精品| 欧美一区二区免费观在线| 丰满白嫩尤物一区二区| 久久日韩粉嫩一区二区三区| 国产99久久久国产精品| 国产精品国产三级国产aⅴ中文| 成人av网站免费| 亚洲第一精品在线| 国产拍揄自揄精品视频麻豆| 一区二区三区丝袜| 成人97人人超碰人人99| 色噜噜狠狠一区二区三区果冻| 天天免费综合色| 亚洲美女在线一区| 色综合中文字幕国产 | 粉嫩高潮美女一区二区三区| 亚洲一区二区三区四区在线免费观看| 欧美中文字幕一区二区三区亚洲| 天堂成人免费av电影一区| 欧美精品一区二区高清在线观看| av不卡免费电影| 国产麻豆一精品一av一免费| 亚洲一区二区欧美日韩| 一区二区在线观看av| 欧美高清在线一区| 亚洲国产精品99久久久久久久久| 日韩一级在线观看| 欧美v国产在线一区二区三区| 欧美色图片你懂的| 99久久久精品| 日韩午夜在线播放| 久久激情综合网| 91麻豆国产自产在线观看| 99re免费视频精品全部| 成人综合在线视频| 欧美国产精品久久| 欧美视频在线一区| 日韩精品一区二区三区四区 | 欧美高清hd18日本| 久久久久国产精品免费免费搜索| 欧美一区二区啪啪| 91免费国产在线观看| 国产精品一区一区三区| 性做久久久久久免费观看| 亚洲成人av资源| 风间由美性色一区二区三区| 色婷婷亚洲综合| 亚洲国产岛国毛片在线| 免费在线观看精品| 三级久久三级久久| 亚洲国产裸拍裸体视频在线观看乱了| 蜜桃av一区二区在线观看 | 男人的天堂亚洲一区| av成人免费在线| 久久青草国产手机看片福利盒子 | 欧美电影免费观看高清完整版在线 | 成人高清视频免费观看| 久久伊人蜜桃av一区二区| 国产精品亚洲综合一区在线观看| 丁香婷婷深情五月亚洲| 黄色小说综合网站| 精品久久久久久无| 免费av成人在线| 91视频国产资源| 久久精品欧美日韩精品| 视频一区二区不卡| 夜夜精品浪潮av一区二区三区| 北条麻妃国产九九精品视频| 久久亚洲综合av| 亚洲综合精品久久| 国模一区二区三区白浆| 91年精品国产| 色婷婷国产精品综合在线观看| 国产精品久久久久一区二区三区共| 不卡视频在线观看| 国产日产欧美精品一区二区三区| 91久久精品一区二区| 亚洲狠狠爱一区二区三区| 欧美一级片在线看| 在线观看视频一区二区| 一区二区成人在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 欧美一三区三区四区免费在线看| 国产麻豆午夜三级精品| 亚洲国产精品99久久久久久久久| 欧美日韩第一区日日骚| 一区二区三区在线高清| 欧美色男人天堂| 国产亚洲精品超碰| 成人a级免费电影| 精品中文字幕一区二区| 九九在线精品视频| 国产电影精品久久禁18| 亚洲在线视频网站| 亚洲精品一二三| 午夜视黄欧洲亚洲| 国产毛片精品视频| 国产ts人妖一区二区| 99re这里只有精品首页| 欧美最猛性xxxxx直播| 午夜亚洲福利老司机| 韩国精品主播一区二区在线观看 | 亚洲一区免费在线观看| 偷拍一区二区三区四区| 不卡一区中文字幕| 久久夜色精品国产噜噜av| 久久久美女毛片| 理论片日本一区| 在线观看不卡一区| 亚洲第一久久影院| 亚洲品质自拍视频网站| 亚洲成人你懂的| 欧美日韩一区精品| 综合分类小说区另类春色亚洲小说欧美 | 99精品欧美一区| 亚洲国产另类精品专区| 欧美性色黄大片手机版| 亚洲视频1区2区| 日韩欧美一级二级三级| 免费一级欧美片在线观看| 欧美日韩高清一区二区三区| 日本一区二区电影| 日韩电影在线一区二区| 色噜噜狠狠色综合中国| 欧美成人精品高清在线播放| 亚洲视频在线一区| 欧美一区二区三级| 懂色av一区二区在线播放| 蜜臀a∨国产成人精品| 午夜视频在线观看一区二区| 1024成人网| 一级精品视频在线观看宜春院| 日韩欧美在线不卡| 国产成人av一区二区|