博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP使用curl函数实现多种请求(post,get)
阅读量:4614 次
发布时间:2019-06-09

本文共 2656 字,大约阅读时间需要 8 分钟。

PHP使用curl函数实现get,post请求

一、CURL介绍

是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,我们使用它来发送HTTP请求。它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。CURL可以根据URL前缀是“HTTP” 还是“HTTPS”自动选择是否加密发送内容。

 

二、使用CURL发送请求的基本流程

使用CURL的扩展完成一个HTTP请求的发送一般有以下几个步骤:

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

下面的程序片段是使用CURL发送HTTP的典型过程:

// 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.baidu.com"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); if($output === FALSE ){ echo "CURL Error:".curl_error($ch); } // 4. 释放curl句柄 curl_close($ch);

三、使用CURL发送get请求

如何使用CURL来发送GET请求,发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔,各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。使用这个函数,结合CURL发送HTTP请求的一般流程,我们封闭了一个发送GET请求的函数——doCurlGetRequest,具体代码如下:

//初始化    $curl = curl_init();    //设置抓取的url    curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');    //设置头文件的信息作为数据流输出    curl_setopt($curl, CURLOPT_HEADER, 1);    //设置获取的信息以文件流的形式返回,而不是直接输出。    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    //执行命令    $data = curl_exec($curl);    //关闭URL请求    curl_close($curl);    //显示获得的数据    print_r($data);

 

 

 

 

使用CURL发送POST请求

 

可以使用CURL提供的选项CURLOPT_POSTFIELDS,设置该选项为POST字符串数据就可以把请求放在正文中。同样我们实现了一个发送POST请求的函数——doCurlPostRequest,代码如下:

//初始化    $curl = curl_init();    //设置抓取的url    curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');    //设置头文件的信息作为数据流输出    curl_setopt($curl, CURLOPT_HEADER, 1);    //设置获取的信息以文件流的形式返回,而不是直接输出。    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    //设置post方式提交    curl_setopt($curl, CURLOPT_POST, 1);    //设置post数据    $post_data = array(        "username" => "coder",        "password" => "12345"        );    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);    //执行命令    $data = curl_exec($curl);    //关闭URL请求    curl_close($curl);    //显示获得的数据    print_r($data);

 

/**** @desc 封装 curl 的调用接口,post的请求方式**/function doCurlPostRequest($url,$requestString,$timeout = 5){ if($url == '' || $requestString == '' || $timeout <=0){ return false; } $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, false); curl_setopt($con, CURLOPT_POSTFIELDS, $requestString); curl_setopt($con, CURLOPT_POST,true); curl_setopt($con, CURLOPT_RETURNTRANSFER,true); curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout); return curl_exec($con); }

 

 

上面代码中除了设置CURLOPT_POSTFIELDS外,我们还设置了CURL_POST为true,标识这个请求是一个POST请求。在POST请求中也是可以传输GET数据的,只需要在URL中拼装GET请求数据即可秀。

 

资料来源:https://www.cnblogs.com/CHEUNGKAMING/p/5717429.html      http://www.cnblogs.com/manongxiaobing/p/4698990.html

 

转载于:https://www.cnblogs.com/ccw869476711/p/8963653.html

你可能感兴趣的文章
ES6 数值的扩展
查看>>
模块操作
查看>>
数据链路层笔记
查看>>
HTML5开发:原理与实现
查看>>
pip安装问题
查看>>
Mysql 出现Table‘xxx’is read only问题
查看>>
欧几里得&扩展欧几里得算法
查看>>
Block使用的注意事项
查看>>
HDU1700:Points on Cycle
查看>>
8个实用的Linux下Bash命令提示行(转)
查看>>
Python常用模块-shutil高级文件处理模块
查看>>
css hack
查看>>
POJ-1273Drainage Ditches(网络流入门题,最大流)
查看>>
桥接模式
查看>>
thrift 学习
查看>>
9. iptables 配置
查看>>
vc多线程编程
查看>>
TCP与UDP的异同(服务端接收数据,客户端发送数据)
查看>>
OkHttp 官方wiki 使用案例 MD
查看>>
【版本】API NDK 系统 分辨率 统计
查看>>