PHP中curl的简单使用

PHP piniu 790浏览 0评论

CURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。PHP也支持 CURL 库。
使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤:

1.初始化连接句柄;
2.设置CURL选项;
3.执行并获取结果;
4.释放CURL连接句柄。

使用CURL发送HTTP的典型过程

<?php
$url = 'https://www.9xue.cn/web/admin.php';
 
//1.初始化
$ch = curl_init();
 
//2.设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
 
//3.执行并获取内容
$output = curl_exec($ch);
 
//4.释放curl句柄
curl_close($ch);
 
//打印获得的数据
print_r($output);

上述代码中使用到了四个函数

curl_init() 和 curl_close() :分别是初始化CURL连接和关闭CURL连接。
curl_exec() :执行CURL请求,如果没有错误发生,该函数的返回是对应URL返回的数据,以字符串表示;如果发生错误,该函数返回 FALSE。
需要注意的是,判断输出是否为FALSE用的是全等号,这是为了区分返回空串和出错的情况。

CURL函数库里最重要的函数是curl_setopt(),它可以通过设定CURL函数库定义的选项来定制HTTP请求。上述代码片段中使用了三个重要的选项:

CURLOPT_URL :指定请求的URL;
CURLOPT_RETURNTRANSFER :设置为1表示将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。例如,我们只想把获取到的内容输入到文件,而不是直接输出给浏览器,我们就可以使用CURLOPT_RETURNTRANSFER选项
CURLLOPT_HEADER :设置为0表示不返回HTTP头部信息。

CURL 发送POST请求的实例:

<?php
$url = 'https://www.9xue.cn/web/admin.php';
$post_data = array ("username" => "haha","key" => "123456");
 
//1.初始化
$ch = curl_init();
 
//2.设置选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
 
//3.执行并获取内容
$output = curl_exec($ch);
 
//4.释放curl句柄
curl_close($ch);
 
//打印获得的数据
$tmpArray = json_decode($output, true);
print_r(tmpArray);

以上方式获取到的数据是json格式的,使用json_decode函数解释成数组。

获取CURL请求的输出信息

在curl_exec()函数执行之后,可以使用curl_getinfo()函数获取CURL请求输出的相关信息,

示例代码如下:

<?php
...
curl_exec($ch);
$info = curl_getinfo($ch);
echo ' 获取 '.$info['url'].'耗时'.$info['total_time'].'秒';

上述代码中curl_getinfo返回的是一个关联数组,包含以下数据:

url: 网络地址。
content_type: 内容编码。
http_code: HTTP状态码。
header_size: header的大小。
request_size: 请求的大小。
filetime: 文件创建的时间。
ssl_verify_result: SSL验证结果。
redirect_count: 跳转计数。
total_time: 总耗时。
namelookup_time: DNS查询耗时。
connect_time: 等待连接耗时。
pretransfer_time: 传输前准备耗时。
size_uplpad: 上传数据的大小。
size_download: 下载数据的大小。
speed_download: 下载速度。
speed_upload: 上传速度。
download_content_length: 下载内容的长度。
upload_content_length: 上传内容的长度。
starttransfer_time: 开始传输的时间表。
redirect_time: 重定向耗时。


发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • * 昵称:
  • * 邮箱: