首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

解析 PHP 使用 cURL 提交 JSON 格式數據

     編輯:PHP 綜合知識

PHP cURL 發送 JSON POST 請求完整指南

現代 API 交互多採用 JSON 格式,PHP cURL 需正確設置 Header 與資料編碼才能成功提交。

標準實作代碼

<?php
// 1. 準備資料並編碼為 JSON
$data = array("name" => "Hagrid", "age" => "36");
$data_string = json_encode($data);

// 2. 初始化 cURL
$ch = curl_init('https://api.local/rest/users');

// 3. 設置關鍵選項
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");           // 請求方法
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);        // JSON 資料
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);            // 返回字串而非直接輸出
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',                      // 關鍵:聲明 JSON 格式
    'Content-Length: ' . strlen($data_string)              // 可選:聲明內容長度
));

// 4. 執行請求
$result = curl_exec($ch);

// 5. 錯誤處理
if (curl_errno($ch)) {
    echo 'cURL 錯誤: ' . curl_error($ch);
}

// 6. 關閉連線
curl_close($ch);

// 7. 處理回應
$response = json_decode($result, true);
print_r($response);

關鍵選項詳解

常見錯誤與修正

❌ 錯誤:未設置 Content-Type

// 伺服器無法識別資料格式,返回 400/415
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
// 缺少 CURLOPT_HTTPHEADER 設置

❌ 錯誤:使用陣列而非 JSON 字串

// 會以 multipart/form-data 發送,非 JSON
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 錯誤
// 正確
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

進階:封裝為可復用函數

function curl_post_json($url, $data, $headers = []) {
    $ch = curl_init($url);
    $default_headers = [
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data)
    ];
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => array_merge($default_headers, $headers),
        CURLOPT_TIMEOUT => 30,
        CURLOPT_SSL_VERIFYPEER => false, // 僅測試環境
    ]);
    $result = curl_exec($ch);
    $error = curl_error($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return ['code' => $code, 'data' => $result, 'error' => $error];
}

// 使用
$json = json_encode(['name' => 'Test']);
$response = curl_post_json('https://api.example.com/endpoint', $json);

掌握此模式,即可輕松對接各類 RESTful API 服務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
選項說明
CURLOPT_CUSTOMREQUEST指定 HTTP 方法(POST/PUT/DELETE 等)
CURLOPT_POSTFIELDS發送資料,JSON 字串需配合 Header
CURLOPT_HTTPHEADER必須設置 Content-Type: application/json
CURLOPT_RETURNTRANSFERtrue 返回字串,false 直接輸出
CURLOPT_SSL_VERIFYPEERHTTPS 時建議設 false(測試環境)