PHP cURL代码举例

上次贴出来的twitter同步到人人的代码,很多人留言说看不懂。其实这个代码从总体上说还是比较简单的,可能大家对 curl相关函数不太了解导致抱怨说看不懂。这里写篇简单的日志介绍一下curl的使用。

注意:如果你需要深入学习,请在线查看php.net的文档,本文仅仅是对不了解PHP curl函数族的用户的入门简介。代码没有经过严格检查,如有错误请留言指出。同样,全文及以下代码以CC by-nc-sa释出,转载请注明出处。

curl是client url library的缩写。使用curl可以完成几乎所有的HTTP交互。我写的PHP代码里,包括本博客上帖出来的例如自动同步twitter到人人,以及 twip项目里,大量使用了这个函数族。
PHP 中curl库的介绍在这里:http://us3.php.net/manual/en/book.curl.php 。如果需要使用PHP做HTTP交互相关的开发,建议仔细阅读这个页面提到的各个函数。

在PHP中使用curl非常简单。典型的使用例子:


各个函数的功能在注释里注明了。对于一般的开发者来说,关键的是掌握curl_setopt函数第二个参数可允许设置的所有内容。选择适当的 curl_setopt参数,可以完成诸如用户名密码验证、post数据、保存cookie、使用代理连接、伪装成浏览器访问等等功能。可以说PHP中使用curl函数族的精髓在curl_setopt函数的使用。

举例说明一下几个典型的应用:
发送GET请求:



访问这个PHP将得到http://example.com/页面的内容。这个代码仅仅是将GET得到的内容简单地“echo”出来,没有进行处理,也没有将网站的cookie以及header信息返回。

发送一个POST请求:



这部分代码post了两个字段,username和password,执行这个脚本之后在index.php中可以通过$_POST['username']和$_POST['password']来访问这两个post字段的值

不直接输出结果,或需要先对结果进行过滤



这部分代码,通过curl_setopt的设置,在执行curl_exec函数时不直接将结果输出,保存在$ret变量中,方便进行其他处理。注意的是:CURLOPT_RETURNTRANSFER的设置只是不让curl_exec不直接输出结果而已,无论有没有设置这个参数,curl_exec 返回值里总是包含获得的页面内容。

返回服务端的完整信息:



这段代码将服务端的http return header原封不动地返回给客户端。使用CURLOPT_HEADERFUNCTION设置了一个回调函数,在curl_exec时,每从服务端得到一行return header信息,就调用这个函数,将curl handler和该header的内容作为参数调用这个函数。设置的函数*必须*返回header内容的长度。如果你足够敏感的话,你会发现,这个就是 Twitter API proxy的简化版本。

使用cookie保持登录:



这段代码稍微有点复杂。这个代码完成了两次curl_exec,演示了如何使用一个curl handler完成多次http request。绝大多数的网站都通过SESSION COOKIE完成用户的保持登录,也就是说只要cookie在,而且session没过期,就可以用这个cookie保持登录状态。这段代码首先在$login,使用POST完成了登陆,同时将cookie保存在/tmp/cookie里。在第二次curl_exec时,curl使用这个 cookie以登录后的状态抓取了user.php的内容,并echo了出来。没错,这个代码就是twitter自动转发人人网站代码的简化版。

 

http://yegle.net/2009/11/08/php-curl-intro/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值