php中curl的使用(一)

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方式安全。

 1 $url = "http://localhost/post_output.php";
 2 $post_data = array (
 3 "name" => "tom",
 4 "gender" => "男",
 5 "hobby" => "papapa"
 6 );
 7 $ch = curl_init();
 8 curl_setopt($ch, CURLOPT_URL, $url);
 9 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
10 // 设置请求为post
11 curl_setopt($ch, CURLOPT_POST, 1);
12 // 把post的变数据加上
13 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
14 $output = curl_exec($ch);
15 curl_close($ch);
16 echo $output;

3、DELETE

 1 $url = "http://localhost/test.php";
 2 $post_data = array (
 3 "foo" => "bar",
 4 "query" => "Nettuts",
 5 "action" => "Submit"
 6 );
 7 $ch = curl_init();
 8 curl_setopt($ch, CURLOPT_URL, $url);
 9 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
10
11 curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
12 curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
13 $output = curl_exec($ch);
14 curl_close($ch);
15 var_dump($output);

4、PUT

 1 $url = "http://localhost/test.php";
 2 $post_data = array (
 3 "foo" => "bar",
 4 "query" => "Nettuts",
 5 "action" => "Submit"
 6 );
 7 $ch = curl_init();
 8 curl_setopt($ch, CURLOPT_URL, $url);
 9 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
10 curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
11 curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
12 $output = curl_exec($ch);
13 curl_close($ch);
14 echo $output;

5、PATCH

 1 $url = "http://localhost/post_output.php";
 2 $post_data = array (
 3 "foo" => "bar",
 4 "query" => "Nettuts",
 5 "action" => "Submit"
 6 );
 7 $ch = curl_init();
 8 curl_setopt($ch, CURLOPT_URL, $url);
 9 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
10 curl_setopt($ch, CULROPT_CUSTOMREQUEST, ‘PATCH‘);
11 curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
12 $output = curl_exec($ch);
13 curl_close($ch);
14 echo $output;

总结curl常用请求工具函数

 1 function callInterfaceCommon($URL,$type,$params,$headers){
 2         $ch = curl_init($URL);
 3        // $timeout = 5;
 4         if($headers!=""){
 5             curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
 6         }else {
 7             curl_setopt ($ch, CURLOPT_HTTPHEADER, array(‘Content-type: application/json‘));
 8         }
 9         curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
10        // curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
11         switch ($type){
12             case "GET" : curl_setopt($ch, CURLOPT_HTTPGET, true);break;
13             case "POST": curl_setopt($ch, CURLOPT_POST,true);
14                 curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
15             case "PUT" : curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");
16                 curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
17             case "PATCH": curl_setopt($ch, CULROPT_CUSTOMREQUEST, ‘PATCH‘);
18                 curl_setopt($ch, CURLOPT_POSTFIELDS, $params);break;
19             case "DELETE":curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
20                 curl_setopt($ch, CURLOPT_POSTFIELDS,$params);break;
21         }
22         $file_contents = curl_exec($ch);//获得返回值
23         return $file_contents;
24         curl_close($ch);
25     }

其他:

获取信息

这是另一个可选的设置项,能够在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。

 1 <?php
 2 // 测试用的URL
 3 $urls = array(
 4 "http://www.sina.com",
 5 "http://www.weibo.com",
 6 "http://www.qq.com"
 7 );
 8 // 测试用的浏览器信息
 9 $browsers = array(
10     "standard" => array (
11         "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)",
12         "language" => "en-us,en;q=0.5"
13     ),
14     "iphone" => array (
15         "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",
16         "language" => "en"
17     ),
18     "french" => array (
19         "user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)",
20         "language" => "fr,fr-FR;q=0.5"
21     )
22 );
23 foreach ($urls as $url) {
24     echo "URL: $url<br>";
25     foreach ($browsers as $test_name => $browser) {
26         $ch = curl_init();
27         // 设置 url
28         curl_setopt($ch, CURLOPT_URL, $url);
29         // 设置浏览器的特定header
30         curl_setopt($ch, CURLOPT_HTTPHEADER, array(
31         "User-Agent: {$browser[‘user_agent‘]}",
32         "Accept-Language: {$browser[‘language‘]}"
33         ));
34         // 页面内容我们并不需要
35         curl_setopt($ch, CURLOPT_NOBODY, 1);
36         // 只需返回HTTP header
37         curl_setopt($ch, CURLOPT_HEADER, 1);
38         // 返回结果,而不是输出它
39         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
40         $output = curl_exec($ch);
41         curl_close($ch);
42         // 有重定向的HTTP头信息吗?
43         if (preg_match("!Location: (.*)!", $output, $matches)) {
44             echo "$test_name: redirects to $matches[1]<br>";
45         } else {
46             echo "$test_name: no redirection<br>";
47         }
48     }
49     echo "<br>";
50 }

结果如下:

时间: 2024-11-13 10:44:28

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

Http原理及PHP中cURL的使用

为了给接下来的教程做好铺垫,本文将讲述如何用PHP发出Http请求进行模拟登录,顺带会讲一些Http请求原理.模拟登录…就是模拟浏览器登录嘛,所谓请求,只不过是你向网站发一些字,网站又给你回复一些字,这一般都是基于Http或Https协议的.平时是浏览器帮我们做好了这些工作,封装数据发送到指定网站,然后接收,最后编译成网页显示出来.在模拟登录中,呵呵,这些都要我们自己做,只是最后不用编译…只要提取到需要的数据就行了. PHP中模拟登录有三种方式.第一是直接用file_get_contens(网站

php中curl不支持https的解决办法

在php程序中使用curl去访问https站点时,报错:Protocol https not supported or disabled in libcurl 该错误信息表示php当时编译时使用的curl库不支持https, 验证方法为你的curl安装目录/bin/curl  -V  显示如下:Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp这表示curl是不支持 https的 为了支持https,需要下载源

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

本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些: HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证, 下载文件断点续传,上传文件断点续传,htt

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

cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代

PHP中curl的CURLOPT_POSTFIELDS参数使用细节

CURL确实是一个不错的好工具,不仅在PHP中还是其他的操作系统中,都是一个非常好用的.但是如果你有些参数没有用好的话,那可能会得不到自己理想中的结果. 在通常情况下,我们使用 CURL 来提交 POST 数据的时候,我们已经习惯了这样的写法: curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 但是这样的写法在有时候并不会很好用,可能会得到服务器返回的 500 错误.但是我们尝试在使用 Socket 方式向服务器提交数据的时候,我们会得到非常正确

PHP中curl的使用

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连接资源句柄的信息 c

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

转载自http://blog.csdn.net/superbirds/article/details/7532277 bool curl_setopt (int ch, string option, mixed value) curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置,value是这个选项给定的值. 下列选项的值将被作为长整形使用(在option参数中指定):     •    CURLOPT_INFILESIZE : 当你上传一个文件到远程站点,

linux中curl命令

linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道翻译的对不对,如果有误的地方,还请指正. -a/--append 上传文件时,附加到目标文件 -A/--user-agent <string>  设置用户代理发送给服务器 - anyauth   可以使用“任何”身份验证方法 -b/--cookie <name=string/file>

php中curl的详细解说 【转载】

这几天在帮一些同学处理问题的时候,突然发现这些同学是使用file_get_contents()函数来采集页面内容的,貌似都没有curl的概念亦或是对这种工具特别不敏感, 本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, 好,废话不多说,我们先来认识下什么是cURL,可能还有很多同学没有听说过这个工具,我先来给大家简单介绍下什么是cURL: cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议, FTP, FT

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

bool curl_setopt (int ch, string option, mixed value) curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置,value是这个选项给定的值. 下列选项的值将被作为长整形使用(在option参数中指定):     •    CURLOPT_INFILESIZE : 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小. •    CURLOPT_VERBOSE : 如果你想CURL报告每一件意外的事