📜  laravel curl 请求 - PHP (1)

📅  最后修改于: 2023-12-03 15:32:33.181000             🧑  作者: Mango

Laravel Curl 请求 - PHP

在 Laravel 中,我们可以使用 curl 函数来进行网络请求。curl 是一个非常强大的网络工具,可以支持多种协议,比如 HTTP、FTP 等等。它可以用来向服务器发送请求并获取响应。

Curl 请求基础

我们可以使用 curl_init() 函数来初始化一个 cURL 会话,然后设置各种请求选项,如 URL、请求方法、请求头、请求体等等。最后,发送请求并获取响应数据。

以下是一个基本的 curl 请求示例:

// 初始化 curl
$ch = curl_init();

// 设置请求选项
curl_setopt($ch, CURLOPT_URL, "https://example.com/api");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 发送请求并获取响应
$response = curl_exec($ch);

// 关闭 curl 会话
curl_close($ch);

// 输出响应结果
echo $response;

在上面的示例中,我们首先使用 curl_init() 函数初始化了一个 cURL 会话,并将其保存到 $ch 变量中。然后,我们通过 curl_setopt() 函数设置了请求选项,其中 CURLOPT_URL 表示请求的 URL,CURLOPT_RETURNTRANSFER 表示将响应作为字符串返回。

最后,我们使用 curl_exec() 函数发送请求并获取响应数据,并通过 curl_close() 函数关闭 cURL 会话。最终,我们将响应数据输出到屏幕上。

Curl 请求进阶

curl 还支持很多其他选项和功能,例如:

  • 设置请求方法(GET、POST、PUT、DELETE 等)
  • 设置请求头
  • 设置超时时间
  • 发送文件和表单数据
  • 处理重定向
  • 处理 SSL/TLS 加密
  • 使用代理服务器

以下是一些进阶用法示例:

设置请求方法

使用 curl_setopt() 函数设置 CURLOPT_CUSTOMREQUEST 选项来设置请求方法:

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
设置请求头

使用 curl_setopt() 函数设置 CURLOPT_HTTPHEADER 选项来设置请求头:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/json",
    "Authorization: Bearer $token"
));
设置超时时间

使用 curl_setopt() 函数设置 CURLOPT_TIMEOUTCURLOPT_CONNECTTIMEOUT 选项来设置超时时间:

curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
发送文件和表单数据

使用 curl_setopt() 函数设置 CURLOPT_POSTFIELDS 选项来发送文件和表单数据:

$postData = array(
    'file' => new CURLFile('/path/to/file.jpg'),
    'name' => 'John Doe',
    'email' => 'john.doe@example.com'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
处理重定向

使用 curl_setopt() 函数设置 CURLOPT_FOLLOWLOCATION 选项来自动处理重定向:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
处理 SSL/TLS 加密

使用 curl_setopt() 函数设置 CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST 选项来处理 SSL/TLS 加密:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
使用代理服务器

使用 curl_setopt() 函数设置 CURLOPT_PROXY 选项来使用代理服务器:

curl_setopt($ch, CURLOPT_PROXY, 'http://proxy.example.com:8080');
Curl 请求封装

为了方便起见,我们可以将 curl 请求封装到一个函数或类中,以便重复使用和简化代码。以下是一个简单的 curl 请求类示例:

class CurlRequest
{
    private $ch;

    public function __construct()
    {
        $this->ch = curl_init();
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
    }

    public function setUrl($url)
    {
        curl_setopt($this->ch, CURLOPT_URL, $url);
    }

    public function setMethod($method)
    {
        curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));
    }

    public function setHeaders($headers)
    {
        $headerArray = array();
        foreach ($headers as $key => $value) {
            array_push($headerArray, "$key: $value");
        }
        curl_setopt($this->ch, CURLOPT_HTTPHEADER, $headerArray);
    }

    public function setBody($body)
    {
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $body);
    }

    public function send()
    {
        $response = curl_exec($this->ch);
        curl_close($this->ch);
        return $response;
    }
}

通过上面的封装类,我们可以更简单地发送 curl 请求:

$request = new CurlRequest();
$request->setUrl('https://example.com/api');
$request->setMethod('post');
$request->setHeaders(array(
    'Authorization' => 'Bearer ' . $token,
    'Content-Type' => 'application/json'
));
$request->setBody(json_encode(array(
    'name' => 'John Doe',
    'email' => 'john.doe@example.com'
)));
$response = $request->send();
echo $response;
总结

本文介绍了 Laravel 中使用 curl 发送网络请求的基本用法,以及一些进阶用法和封装方法。我们可以根据需求选择适当的选项和功能,来满足不同的网络请求需求。