cURL 是一个利用URL语法规定来传输文件和数据的工具,PHP的curl是通过libcurl库与服务器使用各种类型的协议,如HTTP、FTP、TELNET等。

PHP curl函数

curl_close()

关闭一个cURL会话。

curl_copy_handle()

复制一个cURL句柄和它的所有选项。

curl_errno()

返回最后一次的错误号。

curl_error()

返回一个保护当前会话最近一次错误的字符串。

curl_escape()

返回转义字符串,对给定的字符串进行URL编码。

curl_exec()

执行一个cURL会话。

curl_file_create()

创建一个 CURLFile 对象。

curl_getinfo()

获取一个cURL连接资源句柄的信息。

curl_init()

初始化一个cURL会话。

curl_multi_add_handle()

向curl批处理会话中添加单独的curl句柄。

curl_multi_close()

关闭一组cURL句柄。

curl_multi_exec()

运行当前 cURL 句柄的子连接。

curl_multi_getcontent()

如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。

curl_multi_info_read()

获取当前解析的cURL的相关传输信息。

curl_multi_init()

返回一个新cURL批处理句柄。

curl_multi_remove_handle()

移除curl批处理句柄资源中的某个句柄资源。

curl_multi_select()

等待所有cURL批处理中的活动连接。

curl_multi_setopt()

设置一个批处理cURL传输选项。

curl_multi_strerror()

返回描述错误码的字符串文本。

curl_pause()

暂停及恢复连接。

curl_reset()

重置libcurl的会话句柄的所有选项。

curl_setopt_array()

为cURL传输会话批量设置选项。

curl_setopt()

设置一个cURL传输选项。

curl_share_close()

关闭cURL共享句柄。

curl_share_init()

初始化cURL共享句柄。

curl_share_setopt()

设置一个共享句柄的cURL传输选项。

curl_strerror()

返回错误代码的字符串描述。

curl_unescape()

解码URL编码后的字符串。

curl_version()

获取cURL版本信息。

使用curl操作的基本步骤:初始化->设置变量->执行并获取结果->释放curl句柄

curl函数的关键在于curl_setopt的传输选项。

CURL几种请求方式:

1、GET

根据HTTP规范,GET用户信息获取,可以理解为通过url地址访问网址,一个打开百度首页的简单例子:

<?php
// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com"); // 设置url抓取地址
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch); // 执行
// 4. 释放curl句柄
curl_close($ch); // 关闭

有时候通过GET方式获取页面并不需要全部的数据,而需要 截取部分数据,这时候需要通过CURLOPT_RETURNTRANSFER选项将页面以文件流的形式保存,然后进行输出。

<?php
$url = "https://www.baidu.com"; // 你请求的url
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
// 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

2、POST

根据HTTP规范,POST用于向服务器提交数据,典型的应用 为表单提交,安全性较GET方式安全。

 $url = "http://localhost/post_output.php";
$post_data = array (
"name" => "tom",
"gender" => "男",
"hobby" => "papapa"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置请求为post
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变数据加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

3、DELETE

 $url = "http://localhost/test.php";
$post_data = array (
"foo" => "bar",
"query" => "Nettuts",
"action" => "Submit"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
$output = curl_exec($ch);
curl_close($ch);
var_dump($output);

4、PUT

 $url = "http://localhost/test.php";
$post_data = array (
"foo" => "bar",
"query" => "Nettuts",
"action" => "Submit"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

5、PATCH

 $url = "http://localhost/post_output.php";
$post_data = array (
"foo" => "bar",
"query" => "Nettuts",
"action" => "Submit"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CULROPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

总结curl常用请求工具函数

 function callInterfaceCommon($URL,$type,$params,$headers){
$ch = curl_init($URL);
// $timeout = 5;
if($headers!=""){
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
}else {
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
}
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
switch ($type){
case "GET" : curl_setopt($ch, CURLOPT_HTTPGET, true);break;
case "POST": curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
case "PUT" : curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
case "PATCH": curl_setopt($ch, CULROPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);break;
case "DELETE":curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
}
$file_contents = curl_exec($ch);//获得返回值
return $file_contents;
curl_close($ch);
}

其他:

获取信息

这是另一个可选的设置项,能够在cURL执行后获取这一请求的有关信息

curl_exec($ch);
$info = curl_getinfo($ch);
var_dump($info);
// 数组中包含信息
“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_upload” //上传数据的大小
“size_download” //下载数据的大小
“speed_download” //下载速度
“speed_upload” //上传速度
“download_content_length”//下载内容的长度
“upload_content_length” //上传内容的长度
“starttransfer_time” //开始传输的时间
“redirect_time”//重定向耗时

基于浏览器的重定向
有些网站会根据是否是手机浏览器甚至用户来自哪个国家来重定向网页。利用 CURLOPT_HTTPHEADER 选项来设定发送出的HTTP请求头信息(http headers),包括user agent信息和默认语言。然后看一看这些特定网站会重定向到哪些不同的URL。

 <?php
// 测试用的URL
$urls = array(
"http://www.sina.com",
"http://www.weibo.com",
"http://www.qq.com"
);
// 测试用的浏览器信息
$browsers = array(
"standard" => array (
"user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)",
"language" => "en-us,en;q=0.5"
),
"iphone" => array (
"user_agent" => "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3",
"language" => "en"
),
"french" => array (
"user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)",
"language" => "fr,fr-FR;q=0.5"
)
);
foreach ($urls as $url) {
echo "URL: $url<br>";
foreach ($browsers as $test_name => $browser) {
$ch = curl_init();
// 设置 url
curl_setopt($ch, CURLOPT_URL, $url);
// 设置浏览器的特定header
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"User-Agent: {$browser['user_agent']}",
"Accept-Language: {$browser['language']}"
));
// 页面内容我们并不需要
curl_setopt($ch, CURLOPT_NOBODY, 1);
// 只需返回HTTP header
curl_setopt($ch, CURLOPT_HEADER, 1);
// 返回结果,而不是输出它
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
// 有重定向的HTTP头信息吗?
if (preg_match("!Location: (.*)!", $output, $matches)) {
echo "$test_name: redirects to $matches[1]<br>";
} else {
echo "$test_name: no redirection<br>";
}
}
echo "<br>";
}

结果如下:

php中curl的使用(一)的更多相关文章

  1. php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。

    这两天有基友要php中curl抓取教务处成绩的源码,用于微信公众平台的开发.下面笔者只好忍痛割爱了.php中CURL技术模拟登陆抓取数据实战,抓取沈阳工学院教务处学生成绩. 首先,教务处登录需要验证码 ...

  2. HTTP入门(一):在Bash中curl查看请求与响应

    HTTP入门(一):在Bash中curl查看请求与响应 本文简单总结HTTP的请求与响应. 本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和原理可以参考HTTP文档(MDN). 本文版权 ...

  3. Linux中curl的用法

    一.简介:在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款强大的http命令行工具.支持文件的上传和下载,是综合传输工具. 二.语法:curl [option] [url ...

  4. PHP中curl的CURLOPT_POSTFIELDS参数使用细节

    CURL确实是一个不错的好工具,不仅在PHP中还是其他的操作系统中,都是一个非常好用的.但是如果你有些参数没有用好的话,那可能会得不到自己理想中的结果. 在通常情况下,我们使用 CURL 来提交 PO ...

  5. php中CURL实现模拟登录并采集数据

    在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...

  6. PHP中CURL方法curl_setopt()函数的一些参数

    bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置,v ...

  7. PHP中CURL方法curl_setopt()函数的参数

    PHP CURL curl_setopt 参数 bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL ...

  8. php中curl模拟浏览器来传输数据

    cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...

  9. php中curl的详细解说

    cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议, FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE ...

  10. php中的curl】php中curl的详细解说

    本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...

随机推荐

  1. 一个IT人员实用的工具:Tmux

    1.Tmux安装 tmux下载地址: http://sourceforge.net/projects/tmux/files/tmux/tmux-1.6/tmux-1.6.tar.gz/download ...

  2. javaSE_08Java中static、继承、重写

    一.Static 学习静态这个关键字,关键是抓住两个点: 1,关注其语法特点 2,关注其使用场景 案例讲解: 我们先从静态变量开始,当一个成员变量加上static修饰之后,会是一个什么效果? 比如创建 ...

  3. APUE-文件和目录(四)文件系统

    一个命令 mkfs 讲文件系统前先介绍一个用于创建文件系统的命令: mkfs mkfs [options] [-t type fs-options] device [size] 描述 mkfs用来在设 ...

  4. map,zip,reduce函数

    lt=range(5,10) lw=range(8,13) def mul(a,b): return a*b def mul_list(param1,param2): return_list=[] f ...

  5. wap网站的优化建设

    我们在成功建立wap网站之后,不要觉得一时没有达到自己想要的效果就丢之气之,让其成为垃圾链接,我们既然前期做了大量的工作来建立起来这个网站,一定要坚持耐心的把这个网站培养下去,其实就如同我们栽种一个树 ...

  6. Windows系统前端常用PS快捷键:

    1.设置滚轮放大缩小: 编辑--首选项--常规--用滚轮缩放 2.V 移动 ctrl+v 自动选中(图层), 3.M 选框 Shift+M 变换形状 Alt :确定圆形/矩形中心 Shift: 圆形/ ...

  7. css__金属质感的文字

    金属质感的文字 网上看到的优秀思想!神奇的css~~~~ css div.a { width: 300px; text-align: center; color: white; background: ...

  8. Java基础知识整理(一)

    Java开发环境JDK(Java编辑器.Java运行工具(JRE作用).Java文档生成工具.Java打包工具) 1.Java是严格区分大小写的.2.Java程序中一句连续的字符串不能分开在两行书写, ...

  9. 用Html5/CSS3做Winform,一步一步教你搭建CefSharp开发环境(附JavaScript异步调用C#例子,及全部源代码)上

    本文为鸡毛巾原创,原文地址:http://www.cnblogs.com/jimaojin/p/7077131.html,转载请注明 CefSharp说白了就是Chromium浏览器的嵌入式核心,我们 ...

  10. 并归排序 (Java版本,时间复杂度为O(n))

    自己上网查了一下并归排序的定义,把两个排序好的数组重新组成一个排序好的数组就是并归排序, 实现的方式有和多种,自己思考了一下,用java实现了一版本,思路如下,既然是排序好的,只需要依次比较两个数组, ...