PHP建立CURL请求的基本步骤
①:初始化
curl_init()
②:设置属性
curl_setopt().有一长串cURL参数可供设置,它们能指定URL请求的各个细节。
如果需要,可以设置
CURLOPT_TIMEOUT 允许 CURL 函数执行的最长秒数。
curl_setopt($curl, CURLOPT_TIMEOUT, 20);//设置curl函数最大请求时间为20秒
CURLOPT_HTTPHEADER | 设置 HTTP 头字段的数组。格式: array('Content-type: text/plain', 'Content-length: 100') |
//设置请求头信息,'Content-Type: application/json'则请求参数为json格式,
//数组里面每一个值都是一个请求头信息,注意这里是一维数组
curl_setopt ($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
③:执行并获取结果
curl_exec()
④:释放句柄
curl_close()
抓取网页简单案例
(get方式实现)
// 创建一个新cURL资源
$curl = curl_init();
// 设置URL和相应的选项
curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com/");
//CURLOPT_HEADER为true设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
// 抓取URL并把它传递给浏览器
curl_exec($curl);
//关闭cURL资源,并且释放系统资源
curl_close($curl);
或者
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
print_r($data); //把print_r换成echo也可以
结果都如下:
(post方式请求)
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test.html');
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, true);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, true);
/*
* 如果没有数据,这里可以省略
//设置post数据
$post_data = array(
"username" => "qingfeng",
"password" => "12345"
);
//如果是多维数组,必须用http_build_query,一维数组可用可以不用
$post_data = http_build_query($post_data);
//如果是json格式请求,$post_data = json_encode($post_data, 64 | 256);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
*/
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
print_r($data);//也可以用echo
被抓取的网页如下
结果如下
post发送数据的请求(简单举例子)
下面是test.php
//初始化
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, 'http://localhost/test2.php');
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, false);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, true);
//设置post数据
$post_data = array(
"phone" => "13800000000",
"password" => "123"
);
//如果是多维数组,必须用http_build_query,一维数组可用可以不用
$post_data = http_build_query($post_data);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
print_r($data);//也可以用echo
下面是test2.php
if($_POST['phone'] == '13800000000' && $_POST['password'] == '123'){
$data = array(
"code" => 1,//1代表成功
"msg" => "登录成功!",
"data" => array("name"=>"清风","age"=>18)
);
print_r($data);
}else{
$data = array(
"code" => 0,//0代表失败
"msg" => "登录失败!",
"data" => []
);
print_r($data);
}
结果如下:
这时候,我就考虑一个问题我,数组在test.php可以用print_r()很正常,为什么还可以用echo打印而不会报错呢,于是把用var_dump($data)打印一下,结果如下
可以看出,返回的是字符串而不是数组。数据返回的3种格式文本格式(默认),json格式,xml格式
更多请参考:Client URL 库