步骤

使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤:初始化:初始化连接句柄;
设置:设置CURL选项;
执行:执行并获取结果;
得出:释放VURL连接句柄。

代码

 // 1. 初始化$ch = curl_init();// 2. 设置选项,包括URLcurl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");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_init() 和 curl_close() 分别是初始化CURL连接和关闭CURL连接,都比较简单。
curl_exec() 执行CURL请求,如果没有错误发生,该函数的返回是对应URL返回的数据,以字符串表示满意;
如果发生错误,该函数返回 FALSE。需要注意的是,判断输出是否为FALSE用的是全等号,这是为了区分返回空串和出错的情况。
CURL函数库里最重要的函数是curl_setopt(),它可以通过设定CURL函数库定义的选项来定制HTTP请求。上述
代码片段中使用了三个重要的选项:
CURLOPT_URL 指定请求的URL;
CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回
字符串定向到标准输出并返回TRUE;
CURLLOPT_HEADER设置为0表示不返回HTTP头部信息。

获取请求信息

curl_exec($ch);
$info = curl_getinfo($sh);
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:重定向耗时。curl_getinfo()函数还有一个可选择参数$opt,通过这个参数可以设置一些常量,对应到上术这个字段,如果设置了第二个参数,那么返回的只有指定的信息。例如设置$opt为CURLINFO_TOTAL_TIME,则
curl_getinfo()函数只返回total_time,即总传输消耗的时间,在只需要关注某些传输信息时,设置$opt参数
很有意义。

使用CURL发送GET请求

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

这个函数把使用http_build_query 拼装好的带GET参数的URL传给curl_init函数,然后使用CURL发送HTTP请求。

http_build_query是用来封装的   还是要用curl进行发送请求

***@desc 封闭curl的调用接口,get的请求方式。
*/
function doCurlGetRequest($url,$data,$timeout = 5){if($curl == "" || $timeout <= 0){return false;}$url = $url.'?'.http_bulid_query($data);$con = curl_init((string)$url);curl_setopt($con, CURLOPT_HEADER, false);curl_setopt($con, CURLOPT_RETURNTRANSFER,true);curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);return curl_exec($con);
}

使用CURL发送POST请求

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

CURLOPT_POSTFIELDS来封装post请求的内容

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

/**
** @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_RETURNTRANSFER 选项:curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
如果成功只将结果返回,不自动输出任何内容。
如果失败返回FALSE
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); 或着不使用这个选项:
如果成功只返回TRUE,自动输出返回的内容。
如果失败返回FALSEPHP中CURL方法curl_setopt()函数的一些参数 .
bool curl_setopt (int ch, string option, mixed value)
curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。下列选项的值将被作为长整形使用(在option参数中指定):
•    CURLOPT_INFILESIZE : 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。
•    CURLOPT_VERBOSE : 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。
•    CURLOPT_HEADER : 如果你想把一个头包含在输出中,设置这个选项为一个非零值。
•    CURLOPT_NOPROGRESS: 如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。注意:PHP自动设置这个选项为非零值,你应该仅仅为了调试的目的来改变这个选项。
•    CURLOPT_NOBODY : 如果你不想在输出中包含body部分,设置这个选项为一个非零值。
•    CURLOPT_FAILONERROR : 如果你想让PHP在发生错误(HTTP代码返回大于等于300)时,不显示,设置这个选项为一人非零值。默认行为是返回一个正常页,忽略代码。
•    CURLOPT_UPLOAD: 如果你想让PHP为上传做准备,设置这个选项为一个非零值。
•    CURLOPT_POST : 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
•    CURLOPT_FTPLISTONLY : 设置这个选项为非零值,PHP将列出FTP的目录名列表。
•    CURLOPT_FTPAPPEND : 设置这个选项为一个非零值,PHP将应用远程文件代替覆盖它。
•    CURLOPT_NETRC : 设置这个选项为一个非零值,PHP将在你的 ~./netrc 文件中查找你要建立连接的远程站点的用户名及密码。
•    CURLOPT_FOLLOWLOCATION : 设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。
•    CURLOPT_PUT : 设置这个选项为一个非零值去用HTTP上传一个文件。要上传这个文件必须设置CURLOPT_INFILE和CURLOPT_INFILESIZE选项.
•    CURLOPT_MUTE : 设置这个选项为一个非零值,PHP对于CURL函数将完全沉默。
•    CURLOPT_TIMEOUT : 设置一个长整形数,作为最大延续多少秒。
•    CURLOPT_LOW_SPEED_LIMIT: 设置一个长整形数,控制传送多少字节。
•    CURLOPT_LOW_SPEED_TIME : 设置一个长整形数,控制多少秒传送CURLOPT_LOW_SPEED_LIMIT规定的字节数。
•    CURLOPT_RESUME_FROM : 传递一个包含字节偏移地址的长整形参数,(你想转移到的开始表单)。
•    CURLOPT_SSLVERSION: 传递一个包含SSL版本的长参数。默认PHP将被它自己努力的确定,在更多的安全中你必须手工设置。
•    CURLOPT_TIMECONDITION : 传递一个长参数,指定怎么处理CURLOPT_TIMEVALUE参数。你可以设置这个参数为TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。这仅用于HTTP。
•    CURLOPT_TIMEVALUE : 传递一个从1970-1-1开始到现在的秒数。这个时间将被CURLOPT_TIMEVALUE选项作为指定值使用,或被默认TIMECOND_IFMODSINCE使用。下列选项的值将被作为字符串:
•    CURLOPT_URL: 这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项。
•    CURLOPT_USERPWD : 传递一个形如[username]:[password]风格的字符串,作用PHP去连接。
•    CURLOPT_PROXYUSERPWD : 传递一个形如[username]:[password] 格式的字符串去连接HTTP代理。
•    CURLOPT_RANGE : 传递一个你想指定的范围。它应该是”X-Y”格式,X或Y是被除外的。HTTP传送同样支持几个间隔,用逗句来分隔(X-Y,N-M)。
•    CURLOPT_POSTFIELDS : 传递一个作为HTTP “POST”操作的所有数据的字符串。
•    CURLOPT_REFERER: 在HTTP请求中包含一个”referer”头的字符串。
•    CURLOPT_USERAGENT : 在HTTP请求中包含一个”user-agent”头的字符串。
•    CURLOPT_FTPPORT: 传递一个包含被ftp “POST”指令使用的IP地址。这个POST指令告诉远程服务器去连接我们指定的IP地址。这个字符串可以是一个IP地址,一个主机名,一个网络界面名(在UNIX下),或是‘-'(使用系统默认IP地址)。
•    CURLOPT_COOKIE : 传递一个包含HTTP cookie的头连接。
•    CURLOPT_SSLCERT : 传递一个包含PEM格式证书的字符串。
•    CURLOPT_SSLCERTPASSWD : 传递一个包含使用CURLOPT_SSLCERT证书必需的密码。
•    CURLOPT_COOKIEFILE : 传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式,或是堆存在文件中的HTTP风格的头。
•    CURLOPT_CUSTOMREQUEST : 当进行HTTP请求时,传递一个字符被GET或HEAD使用。为进行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request. 注意: 在确认你的服务器支持命令先不要去这样做。下列的选项要求一个文件描述(通过使用fopen()函数获得):
•    CURLOPT_FILE: 这个文件将是你放置传送的输出文件,默认是STDOUT.
•    CURLOPT_INFILE : 这个文件是你传送过来的输入文件。
•    CURLOPT_WRITEHEADER : 这个文件写有你输出的头部分。
•    CURLOPT_STDERR : 这个文件写有错误而不是stderr。用来获取需要登录的页面的例子,当前做法是每次或许都登录一次,有需要的人再做改进了.

PHP的CURL:请求接口 模拟请求登陆 上传下载相关推荐

  1. Android-封装网络请求Retrofit+Rxjava可实现上传下载进度监听

    1.添加依赖 build.gradle: //gson解析 api rootProject.ext.dependencies["gson"] api rootProject.ext ...

  2. tp5.1 乐视云上传视频文件(https请求http乐视云上传接口)http网址下上传视频(https API接口)

    一.sdk_php_v2.0.zip 上传视频 网址:http://www.lecloud.com/zh-cn/help/api.html tp5.1 乐视云上传视频文件(https请求http乐视云 ...

  3. idea构建post请求_IntelliJ IDEA 模拟 POST方式 上传文件

    IntelliJ IDEA 模拟 POST方式 上传文件 IntelliJ IDEA 集成了 HTTP Request,再没有postman的场景下,也可以很方便地模拟各种 HTTP 请求方式的场景. ...

  4. linux curl 命令 http请求、下载文件、ftp上传下载

    1. curl 命令简介 cURL(CommandLine Uniform Resource Locator),是一个利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP.HTTPS. ...

  5. PHP curl模拟表单上传文件 微信公众号素材管理接口crul文件上传核心源码

    PHP curl模拟表单上传文件  微信公众号素材管理接口crul文件上传核心源码 /*** curl 上传文件* @param $url* @param $filePath* @param stri ...

  6. vue中使用axios请求接口,请求会发送两次

    vue中使用axios请求接口,请求会发送两次的问题 浏览器分为简单请求以及非简单请求: 解决方案: 跨域请求需要先发一次Option预请求,OPTIONS是检验是否允许跨域的,如果不希望OPTION ...

  7. C++ vs2017 - libcurl - http请求 代码大全(请求数据,上传下载文件,多线程上传下载文件)

    在网上搜寻各种libcurl的用法,将代码集合于此! 目录 一.配置curl项目 二.Curl 请求参数 1. CURLOPT_POST 2. CURLOPT_URL 3. CURLOPT_HTTPH ...

  8. wangeditor 请求头_wangEditor编辑器添加上传视频功能

    正在帮一个朋友的项目进行一些修改,该项目中使用的是 wangEditor 富文本编辑器. 该编辑器的上传视频有个缺陷,不能手动上传,这是目前的效果图 朋友要求加一个上传视频的功能. 网上的解决方案的文 ...

  9. 通过ajaxFileUpload异步请求上传文件(ajaxFileUpload+servlet实现文件上传下载)

    1.最终效果 实现选择图片(此处以图片为例,支持所有类型文件的上传),选择之后将选择的图片在页面中显示出来,点击上传,可以将文件上传到指定的地址中,上传成功后在当前页面自动显示下载标签. 源码下载地址 ...

最新文章

  1. 某大厂程序员抱怨:“大厂镀金”是鬼话!从大厂裸辞后,面阿里、字节全都挂掉,连货拉拉都不要自己!...
  2. 如何处理Eclipse错误消息 The declared package does not match the expected package
  3. python对文件的读操作方法有哪些-用python实现读写文件常见操作方式
  4. C++0x FAQ中文版:什么时候C++0x会成为一部正式的标准呢?
  5. 018对象——对象 get_class get_declared_classes get_declared_interfaces
  6. WinDbg实战调试命令笔记
  7. 搞定系统设计 03:系统设计面试的答题框架
  8. 在 Nginx 上开启 https 实践
  9. 程序显示文本框_vb程序语言题库
  10. 机械专业与python的联系_机械转行想学python?
  11. win11文件夹打开延迟怎么办 Windows11文件打开延迟的解决方法
  12. 树莓派 ubuntu gpio_如何给树莓派安装操作系统
  13. Daily scrum[2013.12.02]
  14. Perl+批处理实现半自动批量生成动态通讯组
  15. 虚拟的云xx经济越热闹,现实的自己就越孤独
  16. WORD公式编辑器的使用(快捷键or添加快捷方式到工具栏)
  17. V神最新发文:Rollups有望成为以太坊扩容的基石
  18. 虚拟opc服务器软件,OPC Server
  19. 网易云音乐数仓建设之路
  20. 长期支持 LTS(Long-term Support)是怎样的一种支持方式

热门文章

  1. Hadoop-rpc调用案例,服务端,客户端代码案例
  2. Linux和Window下生成以年月日时分秒为名称的文件。
  3. 等于x分之a的平方的导数_清华学霸丨手把手教你导数大题如何骗分(文理通用),家长为孩子收...
  4. 书籍折页是什么效果_Word的书籍折页是什么 如何设置Word的书籍折页
  5. Lib详解--如何判断lib文件是静态库还是导入库
  6. 牛客网数组排序NC140
  7. J2EE中在web.xml异常页面跳转
  8. Java程序编译和运行的过程
  9. web项目没有run on server时..
  10. PHP案例 网页计数器设计