PHP发起POST请求(支持模拟表单和json传值) 4年前

HTTP请求是开发的过程中经常会遇到的任务,GET请求比较简单,但是POST请求却会遇到一些问题。有时候对方需要你模拟表单请求,有时候又希望你传递一个json。我们可以封装一个通用的方法来完成。

function post($url, $data = [], $isJson = true,  $headers = [], $timeout = 10)
{
    if ($isJson) {
        $headers['Content-Type'] = 'application/json';
        $postFields = json_encode($data);
    } else {
        $headers['Content-Type'] = 'application/x-www-form-urlencoded';
        $postFields = http_build_query($data);
    }

    $headers = formatHeader($headers);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    //设定请求后返回结果
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //忽略证书
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
    // 忽略返回的header头信息
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 请求头信息
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // 设置超时时间
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    $response = curl_exec($ch);
    $curlInfo = curl_getinfo($ch);
    curl_close($ch);
    return $response;
}

/**
 * 对header信息进行格式化处理
 * @param $headers
 * @return array
 */
function formatHeader($headers)
{
    if (empty($headers)) return [];

    $result = [];
    foreach ($headers as $key => $value) {
        $result[] = "$key:$value";
    }

    return $result;
}

模拟表单请求:

$url = 'https://test.com';
$params = [
    'name' => 'guo',
    'age' => 25
];
$result = post($url, $params, true);

发送json数据:

$url = 'https://test.com';
$params = [
    'name' => 'guo',
    'age' => 25
];
$result = post($url, $params, false);
image
曾经_寂如流年
时光一逝永不回, 往事只能回味。
3
发布数
1
关注者
1761
累计阅读

热门教程文档

Gin
17小节
QT
33小节
Docker
62小节
Spring Boot
24小节
Vue
25小节
广告