使用curl_init
1来实现HTTP请求。 Curl_init
简介curl_init() 是启动curl 会话的函数。这将返回一个curl 资源句柄。我们可以使用这个句柄来设置curl参数、发起查询、检索响应以及执行其他操作。在php中使用curl来执行http请求非常方便。
使用curl_init()创建curl句柄后,需要通过curl_setopt()设置请求的URL、请求头、请求方法信息等各种参数。然后使用 curl_exec() 发送请求并获取响应。最后,使用 curl_close() 销毁卷曲手柄。
2。基本使用示例
以下是使用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以及是否直接输出返回响应。 。最后使用curl_exec()发送请求并获取响应体,最后销毁curl句柄。
3。运行 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() 发送请求并获取响应。最后,销毁卷曲手柄。
4。设置请求头信息
很多情况下,在实际开发中,必须指定请求头信息。例如,请求接口必须指定授权令牌确认信息。然后我们可以使用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()发送请求并获取响应。最后,销毁卷曲手柄。
5。设置超时
在实际开发中,可能会因为网络不安全而出现请求超时等情况。为了避免这种情况我们可以设置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()用于设置请求信息以及是否直接输出。结果,时间。最后,使用函数curl_exec()发送请求并获取响应。最后,销毁卷曲手柄。
6。 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()发送请求并获取响应。最后,销毁卷曲手柄。
7。设置多个请求一起发送
有时候我们需要批量发送请求,我们不希望每个请求的响应都等待上一个请求的响应到达之后才发送下一个请求。在这种情况下,我们可以使用函数 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_close() 关闭卷曲句柄。最后,使用curl_multi_close()关闭curl批处理句柄。
8。结论
使用函数curl_init()执行不同的HTTP请求,满足我们不同的业务场景。使用curl发送HTTP请求的好处是可以设置各种请求参数,比如请求头、请求体、请求超时等,这样我们就可以自由地控制请求的行为。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网