PHP curl POST JSON 请求完整模板:超时、Header、错误处理 [复制链接]

一级用户组

这篇整理一个 PHP 调用 JSON API 的通用模板,适合对接短信、支付、AI、站长工具、第三方接口。复制后改 URL 和参数就能运行。

完整代码

<?php
function post_json($url, array $data, array $headers = []) {
    $payload = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_TIMEOUT => 15,
        CURLOPT_HTTPHEADER => array_merge([
            'Content-Type: application/json; charset=utf-8',
            'Accept: application/json',
            'Content-Length: ' . strlen($payload),
        ], $headers),
    ]);
    $body = curl_exec($ch);
    $errno = curl_errno($ch);
    $error = curl_error($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($errno) {
        return ['ok' => false, 'status' => 0, 'error' => $error, 'data' => null];
    }
    $json = json_decode($body, true);
    return [
        'ok' => $status >= 200 && $status < 300,
        'status' => $status,
        'error' => $status >= 200 && $status < 300 ? '' : $body,
        'data' => $json === null ? $body : $json,
    ];
}

$result = post_json('https://example.com/api/demo', [
    'name' => '侠客岛',
    'type' => 'demo',
]);

header('Content-Type: application/json; charset=utf-8');
echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

常见错误

1. Header 少了 Content-Type,服务端拿不到 JSON。2. 没设置超时,接口卡住会拖慢页面。3. 只判断 curl 是否成功,没有判断 HTTP 状态码。

关键词:PHP curl POST JSON、PHP 请求 API、PHP 接口错误处理。

最新回复

请先登录后再回复 登录

uid:4 一级用户组
关注
我与春风皆过客,你携秋水揽星河
发帖 20
评论 0
粉丝 0
关注 0
发新帖
目录
PHP curl POST JSON 请求完整模板:超时、Header、错误处理