欢迎访问宙启技术站
智能推送

PHP的curl函数:如何构建HTTP请求并获取响应。

发布时间:2023-06-20 14:49:44

Curl是一种使用在php程序中的网络访问库,它以非常灵活的方式提供了很多网络访问功能。在php中,curl可以让我们以简单的方式访问几乎所有网络资源,例如http、ftp、imap、ldap等协议。

Curl支持使用多种HTTP方法,例如GET、POST、PUT、DELETE等,同时还提供了多种选项来控制请求。在下面的文章中,我们将通过一个简单的例子来了解如何使用php的curl函数构建HTTP请求并获取响应。

1. 发送GET请求

首先,我们将了解如何发送一个GET请求。下面的代码演示了如何使用curl函数发送GET请求:

$url = 'http://www.baidu.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

上面的代码使用了curl_init()函数创建一个新的curl资源,制定请求的url为百度,然后使用curl_setopt()函数来设置一些选项,这里我们设置了CURLOPT_RETURNTRANSFER选项来告诉curl将返回的数据保存到一个字符串中。

然后,我们使用curl_exec()函数执行了请求,并将返回的数据保存到$response变量中。我们还使用curl_getinfo()函数获取了响应的状态码。

最后,我们使用curl_close()函数关闭了curl资源。

2. 发送POST请求

接下来,我们将了解如何使用curl函数发送POST请求。下面的代码演示了如何使用curl函数发送POST请求:

$url = 'http://www.baidu.com';
$data = array('name' => 'test', 'email' => 'test@example.com');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

上面的代码与上面的GET请求非常相似,但是我们使用了CURLOPT_POST选项来告诉curl发送POST请求,同时使用CURLOPT_POSTFIELDS选项来设置请求体。

在这个例子中,我们将一个关联数组传递到http_build_query()函数中,来将请求体转换为urlencoded形式。如果你需要发送JSON或XML格式的数据,则需要手动将数据编码为JSON或XML格式,并将编码后的数据作为请求体。

3. 添加HTTP头

在一些情况下,我们需要添加一些自定义的http头。例如,我们需要在请求头中添加授权信息或自定义的User-Agent信息。下面的代码演示了如何使用curl函数发送POST请求并添加http头:

$url = 'http://www.test.com/api';
$data = array('name' => 'test', 'email' => 'test@example.com');
$headers = array('Authorization: Bearer 123456', 'User-Agent: MyClient/1.0');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

上面的代码与上面的POST请求非常相似,但是我们使用了CURLOPT_HTTPHEADER选项来指定http头。我们将http头作为一个数组传递给Curl,每个元素都是一个表示单个http头的字符串。

4. 超时时间

最后,我们将了解如何设置超时时间。有时,我们可能需要等待对方服务器响应的时间较长,这种情况下,我们需要设置超时时间来避免长时间等待。

下面的代码演示了如何使用curl函数设置超时时间:

$url = 'http://www.test.com/api';
$data = array('name' => 'test', 'email' => 'test@example.com');
$headers = array('Authorization: Bearer 123456', 'User-Agent: MyClient/1.0');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

上面的代码与上面的POST请求非常相似,但是我们使用了CURLOPT_TIMEOUT选项来设置超时时间为10秒。如果超时时间到达,curl将自动取消请求并返回错误。