PHP之curl

当我第一次接触curl的时候,看文档,以及网上search各种资料,官方(http://cn2.php.net/manual/en/intro.curl.php)的解释是,这是某大牛写的一个libcurl库,PHP支持该扩展库,允许我们以各种不同的协议(http、https、ftp、telnet、file...)访问各种不同的服务器,支持post、put、ftp或基于表单的文件上传,支持cookie、代理等等。

好像还是似懂非懂,我觉得最简单的解释是,curl是一个工具集,由libcurl扩展库支持,包含一些函数,使用这些函数可以模拟我们来访问某些地址,也就是,我们手动在浏览器地址栏里面输入http://www.baidu.com,来访问百度,curl就可以代替这种手动操作,以程序的形式来实现这一过程,这个操作、过程得到的结果,是浏览器给了我们一个百度搜索的首页。

既然curl是一个工具集,有很多函数可供调用,可以想象成,在地址栏输入URL(可能会带一些参数),当输入完点击回车的时候,相当于调用了某些函数,这些函数在百度某台或某几台服务器上的脚本上写着,函数运行完后会有某种效果,比如返回了值,或者没返回值,或者打印了一些东西,在这里呈现了一个页面给你,而curl能实现的功能,比简单展示一个页面多得多,这些各自不同的功能是通过curl_setopt函数来实现的。比如在接SDK的时候,别人提供的是访问地址形式的API,这时curl就大显身手。

1.get实现

<?php
    $url = ‘http://www.somesite.com‘;
    $data = array(‘username‘=>‘Peter‘, ‘password‘=>12345);
    function get($url, $data = array()){
        $ch = curl_init();   // 初始化一个curl资源类型变量

        /*设置访问的选项*/
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  // 启用时会将服务器服务器返回的Location: 放在header中递归的返回给服务器
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );  // 将获得的数据返回而不是直接在页面上输出
        curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP );  // 设置访问地址用的协议类型为HTTP
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);  // 访问的超时时间限制为15s
        $url = url.‘?‘.http_build_query($data);
        curl_setopt($ch, CURLOPT_URL, $url);  // 设置即将访问的URL

        $result = curl_exec($ch);  // 执行本次访问,返回一个结果
        // ...                     // 针对结果的正确与否做一些操作
        return $result;
    }
    // $result = get(%url, $data);  // 调用

2.post实现

<?php
    function post($url, $data = array()){
        $ch = curl_init(); 

        curl_setopt($ch, CURLOPT_POST, true);  // 设置为post传递形式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  // 设置post传递的数据
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  // 设置数据以文件流的形式返回
        curl_setopt($ch, CURLOPT_USERAGENT, ‘‘);  // 将用户代理置空
        curl_setopt($ch, CURLOPT_HEADER, false);  // 设置不显示头信息

        $result = curl_exec($ch);
        $info = curl_getinfo($ch);   // 获取本次访问资源的相关信息

        return $result;
    }   

比如把URL参数传递为http://www.baidu.com,data参数传递为array(‘uid‘=>‘122139342‘, ‘password‘=>‘wfiw7482f‘),此时var_dump一下$result,如下

返回了一个字符串,当然这只是测试。

curl_getinfo函数获取的事本次访问资源句柄的信息,大概有访问的URL、访问状态码、头大小、连接时间、跳转的URL、访问的本地IP和接口等等,如下

暂时到这,日后补充其他curl可以实现的功能。

时间: 2024-10-04 00:04:47

PHP之curl的相关文章

微信支付错误两个问题的解决:curl出错,错误码:60

如下是运行微信支付测试代码时出错代码: Warning: curl_setopt() expects parameter 2 to be long, string given in D:\wwwroot\weixinpaytest\pay\WxPay.JsApiPay.php on line 99 Fatal error: Uncaught exception 'WxPayException' with message 'curl出错,错误码:60' in D:\wwwroot\weixinpa

php curl 伪造IP来源的实例代码

curl发出请求的文件fake_ip.php: 代码 代码如下: <?php $ch = curl_init(); $url = "http://localhost/target_ip.php"; $header = array( 'CLIENT-IP:58.68.44.61', 'X-FORWARDED-FOR:58.68.44.61', ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPH

Linux系统curl命令

curl命令 curl  -I  网址    //-I :省略源代码查看,内容如下: 我们查看的是HTTP/1.1 200 OK 这一行 常用状态吗有:200 301 302 404 403 502 503 上述状态码中,只有  200 是OK 的 如果出现301 302 ,它可能是因为在服务端设置了  跳转 ,内容如下: 上图显示,HTTP/1.1 301 设置了跳转,跳转到了下面:Location:http://www.aminglinux.com/bbs/forum.php -x  可以指

关于curl跳转抓取

今天在公司碰到了一个bug,就是以前一直用curl下载的MP3录音文件为空了,但是浏览器去get请求是有文件的,并且大小还不是0kb,但是我用curl下载下来就是0K,百思不得其解.终于功夫不负有心人,得到了方法,原来我一直要去第三方的接口拿到录音数据,但是今天的录音数据中地址跳转了,也就是第一次请求的地址返回的是302, 这是以前的代码 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // curl_setopt($ch, CUR

php+curl上传文件

因为公司项目用java做的,需要我这边用php上传文件.只给了个接口,参数都不明确,然后这边不提交表单,在生成pdf之后就立马上传.用了php+curl,总是没上传成功,这里看到了篇文章http://blog.sina.com.cn/s/blog_709475a101013dlf.html,希望可以借鉴.还有这篇http://www.cnblogs.com/jackluo/p/4113255.html

curl 命令获取网络网站的响应码

curl命令参数很多,博主很多都没有用过.今天发现可以用-w参数挺好用的. -w:--write-out,作用就是输出点什么.curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出.输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{variable_name}的格式,如果需要输出%,double一下即可,即%%,同时,\n是换行,\r是回车,\t是TAB.curl会用合适的值来替代输出格式中的变量,所有可用变量如下: url_effective 最终获取的url地

php使用curl提交xml数据

$str_callback_url="xxxx.com/api.php";$str_callback_url="xml数据";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $str_callback_url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch,

CURL常用命令详解及示例

原文地址: http://www.thegeekstuff.com/2012/04/curl-examples/ 下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名的文件中-O:使用URL中默认的文件名保存文件到本地 1 # 将文件下载到本地并命名为mygettext.html 2 curl -o mygettext.html http://www

PHP curl模拟浏览器抓取网站信息

curl是一个利用URL语法在命令行方式下工作的文件传输工具. 官方解释 curl是一个利用URL语法在命令行方式下工作的文件传输工具.curl是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP.curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies,

利用curl函数处理GET数据获取微信公众号的access_token

<?php//处理GET数据 $appid="wx0cf1ae434525b3bc";//填写AppID $secret="530d5915c163cce3073062e281a8b21c";//填写Secret $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}&quo