You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP文件中发送JSON格式的POST API请求

在PHP中发送JSON格式的POST API请求

Hey folks! 结合你给出的API配置(带Basic认证的Authorization头),我整理了几种在PHP里发送JSON POST请求的实用方案,从基础到进阶都有,你可以根据自己的环境选择:

方法一:使用cURL(兼容性最好)

cURL是PHP里处理HTTP请求最常用的工具,几乎所有环境都支持。以下是完整的代码示例,已经集成了你提供的认证头:

<?php
// 1. 准备API基础信息
$apiUrl = "https://your-api-endpoint-here.com"; // 替换成你实际的API URL
$authHeader = "Basic OTE5MTAwMTkxNjY2OyMzQ1Ng=="; // 你提供的认证头值

// 2. 准备要发送的JSON数据(根据API需求调整)
$postData = [
    "param1" => "value1",
    "param2" => "value2"
];
$jsonPayload = json_encode($postData);

// 3. 初始化cURL会话
$ch = curl_init($apiUrl);

// 4. 设置cURL选项
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true, // 把响应结果返回而不是直接输出
    CURLOPT_POST => true, // 设置为POST请求
    CURLOPT_HTTPHEADER => [
        "Authorization: {$authHeader}",
        "Content-Type: application/json", // 声明请求体是JSON格式
        "Content-Length: " . strlen($jsonPayload) // 可选,但有些API需要
    ],
    CURLOPT_POSTFIELDS => $jsonPayload // 传入JSON格式的请求体
]);

// 5. 执行请求并获取响应
$response = curl_exec($ch);
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 获取HTTP状态码

// 6. 处理可能的错误
if(curl_errno($ch)) {
    echo "cURL Error: " . curl_error($ch);
}

// 7. 关闭cURL会话
curl_close($ch);

// 8. 处理响应
if($httpStatusCode === 200) {
    $responseData = json_decode($response, true);
    print_r($responseData); // 输出解析后的JSON响应
} else {
    echo "Request failed with status code: {$httpStatusCode}";
    echo "Response: {$response}";
}
?>

方法二:使用file_get_contents(更简洁)

如果你的PHP环境启用了allow_url_fopen配置,这个方法会更简洁,不需要依赖cURL:

<?php
$apiUrl = "https://your-api-endpoint-here.com";
$authHeader = "Basic OTE5MTAwMTkxNjY2OyMzQ1Ng==";

$postData = [
    "param1" => "value1",
    "param2" => "value2"
];
$jsonPayload = json_encode($postData);

// 设置请求上下文
$context = stream_context_create([
    "http" => [
        "method" => "POST",
        "header" => implode("\r\n", [
            "Authorization: {$authHeader}",
            "Content-Type: application/json",
            "Content-Length: " . strlen($jsonPayload)
        ]),
        "content" => $jsonPayload
    ]
]);

// 发送请求
$response = file_get_contents($apiUrl, false, $context);
// 解析HTTP状态码
preg_match('/HTTP\/\d\.\d (\d+)/', $http_response_header[0], $matches);
$httpStatusCode = $matches[1] ?? 0;

// 处理响应
if($response !== false) {
    $responseData = json_decode($response, true);
    print_r($responseData);
} else {
    echo "Request failed";
}
?>

方法三:使用Guzzle HTTP客户端(现代PHP项目首选)

如果你的项目用Composer管理依赖,Guzzle是更优雅的选择,代码可读性更高,错误处理也更完善:

首先通过Composer安装Guzzle:

composer require guzzlehttp/guzzle

然后编写请求代码:

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();
$apiUrl = "https://your-api-endpoint-here.com";
$authHeader = "OTE5MTAwMTkxNjY2OyMzQ1Ng==";

try {
    $response = $client->post($apiUrl, [
        "headers" => [
            "Authorization" => "Basic {$authHeader}",
            "Content-Type" => "application/json"
        ],
        "json" => [ // Guzzle会自动编码为JSON并设置Content-Type
            "param1" => "value1",
            "param2" => "value2"
        ]
    ]);

    $responseData = json_decode($response->getBody(), true);
    print_r($responseData);
} catch (GuzzleHttp\Exception\RequestException $e) {
    echo "Request Error: " . $e->getMessage();
    if($e->hasResponse()) {
        echo "Response: " . $e->getResponse()->getBody();
    }
}
?>

关键注意事项

  • 确保json_encode($postData)没有失败:可以用json_last_error()检查编码是否正常。
  • 你的Authorization头是Basic认证,要确保base64字符串是正确的用户名:密码编码结果,如果后续出现认证失败,可以重新生成这个串。
  • 务必处理HTTP错误状态码(比如401未授权、404不存在、500服务器错误等),不要只依赖响应内容。

内容的提问来源于stack exchange,提问作者Vishnu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:45:21