使用curl_init实现HTTP请求

一、curl_init简介

curl_init()是一个初始化curl会话的函数,返回的是一个curl资源句柄,我们可以通过这个句柄设置curl的参数,发起请求,获取响应等操作。在php中使用curl完成http请求是非常方便的。

使用curl_init()函数创建curl句柄后,需要通过curl_setopt()设置各种参数,如请求的url、请求方式、请求头信息等。然后使用curl_exec()函数发送请求获取响应。最后使用curl_close()函数销毁curl句柄。

二、基本使用示例

以下是一个简单的使用curl发送HTTP GET请求的示例:

$url = 'http://example.com/api/get_user_info?id=123';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的示例中,首先定义了请求的url,然后使用curl_init()函数创建curl句柄,并调用curl_setopt()函数设置了请求的url和返回response时是否直接输出。最后使用curl_exec()函数发送请求并获取响应内容,最后销毁curl句柄。

三、发起POST请求

使用curl发起POST请求也非常简单,使用curl_setopt()设置CURLOPT_POST为true即可。如下面的示例:

$url = 'http://example.com/api/create_user';
$data = ['name' => 'jack', 'age' => 20];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

上面的代码中,定义了请求的url和请求的数据,使用curl_init()函数创建curl句柄,并使用curl_setopt()函数设置了请求信息,包括url、是否直接输出结果、是否为POST请求及请求的数据。使用curl_exec()函数发送请求并获取响应。最后销毁curl句柄。

四、设置请求头信息

在实际开发中,很多情况下需要设置请求头信息,如请求接口需要设置Authorization token验证信息。那么我们可以使用curl_setopt()函数设置请求头信息,如下面的示例:

$url = 'http://example.com/api/get_user_info';
$headers = ['Authorization: Bearer xxxxxxxxxxxxxxxx'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的代码中,定义了请求的url和请求头信息,使用curl_init()函数创建curl句柄,并使用curl_setopt()函数设置了请求信息,包括url、是否直接输出结果、请求头信息。最后使用curl_exec()函数发送请求并获取响应。最后销毁curl句柄。

五、设置超时时间

在实际开发中,因为网络的不确定性,很可能出现请求超时等情况。为了避免这种情况的发生,我们可以设置curl的请求超时时间,超过设定时间则会自动中断请求。设置请求超时时间也很简单,即使用curl_setopt()函数设置CURLOPT_TIMEOUT即可。如下面的示例:

$url = 'http://example.com/api/get_user_info';
$timeout = 5;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的代码中,定义了请求的url和超时时间,使用curl_init()函数创建curl句柄,并使用curl_setopt()函数设置了请求信息,包括url、是否直接输出结果、超时时间。最后使用curl_exec()函数发送请求并获取响应。最后销毁curl句柄。

六、设置Cookie

在一些业务场景中,需要使用Cookie来维持用户的登录状态等信息。使用curl发送请求时设置Cookie也很方便,可以使用curl_setopt()函数设置CURLOPT_COOKIE即可。如下面的示例:

$url = 'http://example.com/api/get_user_info';
$cookie = 'session_id=xxxxxxxxxxxxx';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的代码中,定义了请求的url和Cookie信息,使用curl_init()函数创建curl句柄,并使用curl_setopt()函数设置了请求信息,包括url、是否直接输出结果、Cookie信息。最后使用curl_exec()函数发送请求并获取响应。最后销毁curl句柄。

七、设置多个请求一起发送

有时候我们需要批量发送请求,而且不希望每个请求的响应都要等待上一个请求的响应到达才能继续发下一个请求,此时我们可以使用curl_multi_init()函数进行多个请求同时发起。如下面的示例:

$urls = [
    'http://example.com/api/get_user_info?id=1',
    'http://example.com/api/get_user_info?id=2',
    'http://example.com/api/get_user_info?id=3',
];
$ch_arr = [];
$mh = curl_multi_init();
foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $ch_arr[] = $ch;
}
do {
    curl_multi_exec($mh, $running);
    $info = curl_multi_info_read($mh);
} while ($running > 0);
foreach ($ch_arr as $ch) {
    $response = curl_multi_getcontent($ch);
    var_dump($response);
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}
curl_multi_close($mh);

以上代码中定义了三个请求的url,然后使用curl_multi_init()函数创建了一个curl批处理句柄,遍历每个请求的url,使用curl_init()函数为每个请求创建curl句柄,并调用curl_setopt()函数设置请求信息。使用curl_multi_add_handle()函数将每个curl句柄加入curl批处理句柄,然后使用curl_multi_exec()函数发送请求。使用curl_multi_info_read()函数获取curl执行情况的信息,将所有请求都执行完毕后,使用curl_multi_getcontent()函数获取每个请求的响应,并输出。最后使用curl_multi_remove_handle()函数将每个curl句柄从curl批处理句柄中删除,并调用curl_close()函数关闭curl句柄。最后使用curl_multi_close()函数关闭curl批处理句柄。

八、结语

使用curl_init()可以完成各种HTTP请求,能满足我们的各种业务场景使用。使用curl发送HTTP请求的好处在于可以设置各种请求参数,如请求头、请求体、请求超时时间等,使我们可以自由的控制请求行为。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/285827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-22 16:06
下一篇 2024-12-22 16:06

相关推荐

  • 为什么要加请求头(HTTP Header)?

    在进行网页抓取(Web Scraping)时,请求头(HTTP Header)扮演着非常重要的角色。请求头中包含了用户代理(User Agent)、cookie、referer等信…

    编程 2025-04-27
  • HTTP请求方式的选择:POST还是GET?

    对于使用xxl-job进行任务调度的开发者,通常需要发送HTTP请求来执行一些任务。但是在发送请求时,我们总是会遇到一个问题:是使用POST还是GET?下面将从多个方面对这个问题进…

    编程 2025-04-27
  • 如何快速发布http接口

    想要快速发布http接口,可以从以下几个方面入手。 一、选择合适的框架 选择合适的框架对于快速发布http接口非常重要。目前比较受欢迎的框架有Flask、Django、Tornad…

    编程 2025-04-27
  • 深入下探golang http server

    Go语言已经成为了软件开发领域的热门语言,它的高性能、应用广泛、安全性好,使得它成为了众多开发者心目中的首选编程语言。在众多应用场景中,golang http server的应用非…

    编程 2025-04-23
  • Python HTTP服务详解

    一、HTTP服务概述 HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,负责客户端和服务器之间的通信。而Python则是一种非常优秀的编程语言,它集成了许多库,使得开…

    编程 2025-04-23
  • HTTP状态码412——前置条件失败

    一、什么是412状态码 HTTP状态码是客户端与服务器进行通信时的返回码,它表示服务器对请求的响应结果。HTTP状态码由3位数字表示,其中第一个数字的范围为1-5,依次表示请求已经…

    编程 2025-04-23
  • http下载文件教程及常见问题解决

    一、下载http文件 要从http下载文件,最常见的方法是使用Python中的requests库。下面是一个示例代码,可以下载指定的文件: import requests url …

    编程 2025-04-22
  • 如何架设一个可用的HTTP代理服务器

    一、基础概念 HTTP代理服务器是一种服务器,它可以代替客户端向网络服务器发送请求并返回响应。HTTP代理通常用于访问受限的网站、监视网络流量或提高访问速度。 HTTP代理可以分为…

    编程 2025-04-22
  • HTTP 状态码101 – 切换协议

    HTTP 状态码101表示服务器正在切换协议。它是一个比较少见的状态码,但仍然在某些场景下被广泛使用。本文将从以下几个方面详细介绍状态码101的含义、用途以及相关的实际应用。 一、…

    编程 2025-04-18
  • curlcookie:如何在编程中方便地处理HTTP Cookie

    一、了解HTTP Cookie HTTP Cookie是HTTP协议中的一个重要概念,它允许web服务器在客户端存储信息,以便在一个回话中保持状态。当客户端发送请求时,服务器可以在…

    编程 2025-04-12

发表回复

登录后才能评论