【PHP代码片段】封装CURL构造get函数

实际上我们让大模型生成一段代码不是不行,以下代码实际也是大模型生成的,然后我再修改的。记下来主要是方便自己使用的时候好找,也是为了积累经验。

function _curl_get($url) {
    $ch = curl_init();
    
    // 设置自定义请求头
    $headers = [
        "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", // 自定义 User-Agent ,还有另一种做法就是设置 CURLOPT_USERAGENT 
        "X-Requested-With: XMLHttpRequest", // 标识是来自 XHR 请求
        "Accept: application/json", // 根据需要配置
    ];
    
    // 设置 URL
    curl_setopt($ch, CURLOPT_URL, $url);
    
    // 返回结果而不是直接输出
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 跟随重定向
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    
    // 设置连接超时时间(秒)
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 连接超时,10秒,具体来说,这个超时指的是以下过程的时间限制:DNS 解析和TCP 三次握手的TCP连接建立超时。
    
    // 设置请求超时时间(秒)
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 请求超时,30秒,具体来说,这个超时控制整个HTTP请求的时间,包括连接时间、数据传输时间。
    
    // 启用连接复用
    curl_setopt($ch, CURLOPT_FORBID_REUSE, false);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, false);
    
    // 启用压缩
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    
    // 启用 HTTP/2
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
    
    // SSL/TLS 安全设置
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 不验证证书合法性
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 不验证主机名
    
    // 设置自定义请求头
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    // 数据传输优化
    curl_setopt($ch, CURLOPT_BUFFERSIZE, 128000);// 设置缓冲区大小为 128KB
    
    $response = curl_exec($ch);
    
    if ($error = curl_error($ch)) {
        curl_close($ch);
        throw new Exception("cURL error: " . $error);
    }
    
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode !== 200) {
        throw new Exception("HTTP request failed with status code $httpCode");
    }
    
    return $response;
}

为什么要封装这个CURL呢,实际上是因为PHP提供的这一模块实在难以记忆,看上去很灵活,实则不然,你不每次查词典完全不会使用。我们通常会忽略ssl认证,并且需要设置超时,需要修改user-agent。以上函数的用法:

try {
    $url = "https://example.com";
    $response = _curl_get($url);
    echo "Response:\n$response\n";
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注