PHP中使用CURL实现请求

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格式

猜你喜欢

转载自blog.csdn.net/weixin_37909391/article/details/80034847