php中curl的使用(一)
cURL 是一个利用URL语法规定来传输文件和数据的工具,PHP的curl是通过libcurl库与服务器使用各种类型的协议,如HTTP、FTP、TELNET等。
|
关闭一个cURL会话。 |
|
|
复制一个cURL句柄和它的所有选项。 |
|
|
返回最后一次的错误号。 |
|
|
返回一个保护当前会话最近一次错误的字符串。 |
|
|
返回转义字符串,对给定的字符串进行URL编码。 |
|
|
执行一个cURL会话。 |
|
|
创建一个 CURLFile 对象。 |
|
|
获取一个cURL连接资源句柄的信息。 |
|
|
初始化一个cURL会话。 |
|
|
向curl批处理会话中添加单独的curl句柄。 |
|
|
关闭一组cURL句柄。 |
|
|
运行当前 cURL 句柄的子连接。 |
|
|
如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。 |
|
|
获取当前解析的cURL的相关传输信息。 |
|
|
返回一个新cURL批处理句柄。 |
|
|
移除curl批处理句柄资源中的某个句柄资源。 |
|
|
等待所有cURL批处理中的活动连接。 |
|
|
设置一个批处理cURL传输选项。 |
|
|
返回描述错误码的字符串文本。 |
|
|
暂停及恢复连接。 |
|
|
重置libcurl的会话句柄的所有选项。 |
|
|
为cURL传输会话批量设置选项。 |
|
|
设置一个cURL传输选项。 |
|
|
关闭cURL共享句柄。 |
|
|
初始化cURL共享句柄。 |
|
|
设置一个共享句柄的cURL传输选项。 |
|
|
返回错误代码的字符串描述。 |
|
|
解码URL编码后的字符串。 |
|
|
获取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的使用(一)的更多相关文章
- php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。
这两天有基友要php中curl抓取教务处成绩的源码,用于微信公众平台的开发.下面笔者只好忍痛割爱了.php中CURL技术模拟登陆抓取数据实战,抓取沈阳工学院教务处学生成绩. 首先,教务处登录需要验证码 ...
- HTTP入门(一):在Bash中curl查看请求与响应
HTTP入门(一):在Bash中curl查看请求与响应 本文简单总结HTTP的请求与响应. 本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和原理可以参考HTTP文档(MDN). 本文版权 ...
- Linux中curl的用法
一.简介:在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款强大的http命令行工具.支持文件的上传和下载,是综合传输工具. 二.语法:curl [option] [url ...
- PHP中curl的CURLOPT_POSTFIELDS参数使用细节
CURL确实是一个不错的好工具,不仅在PHP中还是其他的操作系统中,都是一个非常好用的.但是如果你有些参数没有用好的话,那可能会得不到自己理想中的结果. 在通常情况下,我们使用 CURL 来提交 PO ...
- php中CURL实现模拟登录并采集数据
在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...
- PHP中CURL方法curl_setopt()函数的一些参数
bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置,v ...
- PHP中CURL方法curl_setopt()函数的参数
PHP CURL curl_setopt 参数 bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL ...
- php中curl模拟浏览器来传输数据
cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...
- php中curl的详细解说
cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议, FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE ...
- php中的curl】php中curl的详细解说
本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...
随机推荐
- 《算法4》2.1 - 选择排序算法(Selection Sort), Python实现
选择排序算法(Selection Sort)是排序算法的一种初级算法.虽然比较简单,但是基础,理解了有助于后面学习更高深算法,勿以勿小而不为. 排序算法的语言描述: 给定一组物体,根据他们的某种可量化 ...
- 360你吃屎啊你,hao123,12345等等
请看到这个文章的小伙伴将文章看完,看看我的感受是有多深,谢谢了 现在浏览器已经是人们经常用的东西,相信都有时不时就差度娘的习惯吧 也就是说每个人都有自己喜欢的主页 可电脑有时候就是遭不住,360什么的 ...
- 10分钟学会JAVA注解(annotation)
(原) 先认识注解(Annotation) 定义类用class,定义接口用interface,定义注解用@interface 如public @interface AnnotationTest{} 所 ...
- 使用CSS设置滚动条样式以及如何去掉滚动条的方法
<STYLE> BODY { SCROLLBAR-FACE-COLOR: #f892cc; SCROLLBAR-HIGHLIGHT-COLOR: #f256c6; SCROLLBAR-SH ...
- TypeScript 零基础入门
前言 2015 年末看过一篇文章<ES2015 & babel 实战:开发 npm 模块>,那时刚接触 ES6 不久,发觉新的 ES6 语法大大简化了 JavaScript 程序的 ...
- [转]html转码表
为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...
- Grunt压缩HTML和CSS
我的小伙伴们!我明明 在压缩图片之前发过一篇,关于Grunt压缩cCSS是和HTML的!但是不知道为什么,今天再一看.迷之消失了! 没办法.只好今天在写一次,从头开始!首先.我来介绍一下为什么要用构建 ...
- mysql字符编码设置
1.显示当前编码信息 mysql>show variables like '%character%' +--------------------------+------------------ ...
- 补:关于man关于SEE ALSO(参见)中代号与vim下常用命令
1.查阅/etc/issue文件时,使用man issue发现manual中see also出现motd(5), agetty(8), mingetty(8)字样.以及文档行首的issue(5)究竟是 ...
- PHP设计模式:简单工厂
示例代码详见https://github.com/52fhy/design_patterns 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 也就是使用的 ...