PHP建立CURL请求的基本步骤
①:初始化curl_init()
②:设置属性
curl_setopt().有一长串cURL参数可供设置,它们能指定URL请求的各个细节。
如果需要,可以设置
CURLOPT_TIMEOUT 允许 CURL 函数执行的最长秒数。
curl_setopt($curl, CURLOPT_TIMEOUT, 20);//设置curl函数最大请求时间为20秒③:执行并获取结果
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" ); 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" ); 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格式