欢迎訪问个人原创地址: http://www.phpthinking.com/archives/468

使用PHP的cURL库能够简单和有效地去抓网页。

你仅仅须要执行一个脚本。然后分析一下你所抓取的网页。然后就能够以程序的方式得到你想要的数据了。

不管是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。本文主要讲述假设使用这个PHP库。

启用 cURL 设置

首先,我们得先要确定我们的PHP是否开启了这个库,你能够通过使用php_info()函数来得到这一信息。

<?php
    phpinfo();
?>

假设你能够在网页上看到以下的输出。那么表示cURL库已被开启。

假设你看到的话,那么你须要设置你的PHP并开启这个库。假设你是在Windows平台下,那么很easy。你须要改一改你的php.ini文件的设置,找到php_curl.dll,并取消前面的分号凝视即可了。例如以下所看到的:

//取消下在的凝视
extension=php_curl.dll 

假设你是在Linux以下,那么。你须要又一次编译你的PHP了。编辑时,你须要打开编译參数——在configure命令上加上“–with-curl” 參数。

一个小演示样例

假设一切就绪,以下是一个小例程:

<?

php

// 初始化一个 cURL 对象
$curl =
curl_init(); 
// 设置你须要抓取的URL
curl_setopt($curl,
CURLOPT_URL, 
'http://coolshell.cn');
// 设置header
curl_setopt($curl,
CURLOPT_HEADER, 1);
// 设置cURL 參数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl,
CURLOPT_RETURNTRANSFER, 1);
// 执行cURL,请求网页
$data =
curl_exec(
$curl);
// 关闭URL请求
curl_close($curl);
// 显示获得的数据
var_dump($data);

怎样POST数据

上面是抓取网页的代码,以下则是向某个网页POST数据。如果我们有一个处理表单的网址http://www.example.com/sendSMS.php。其能够接受两个表单域,一个是电话号码。一个是短信内容。

<?php
    $phoneNumber '13912345678';
    $message 'This
message was generated by curl and php'
;
    $curlPost 'pNUMBER='  .
urlencode(
$phoneNumber)
'&MESSAGE=' .
urlencode(
$message)
'&SUBMIT=Send';
    $ch =
curl_init();
    curl_setopt($ch,
CURLOPT_URL, 
'http://www.example.com/sendSMS.php');
    curl_setopt($ch,
CURLOPT_HEADER, 1);
    curl_setopt($ch,
CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,
CURLOPT_POST, 1);
    curl_setopt($ch,
CURLOPT_POSTFIELDS, 
$curlPost);
    $data =
curl_exec();
    curl_close($ch);
?

>

从上面的程序我们能够看到。使用CURLOPT_POST设置HTTP协议的POST方法,而不是GET方法,然后以CURLOPT_POSTFIELDS设置POST的数据。

关于代理server

以下是一个怎样使用代理server的演示样例。

请注意当中高亮的代码。代码非常easy,我就不用多说了。
<?php 
    $ch =
curl_init();
    curl_setopt($ch,
CURLOPT_URL, 
'http://www.example.com');
    curl_setopt($ch,
CURLOPT_HEADER, 1);
    curl_setopt($ch,
CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,
CURLOPT_HTTPPROXYTUNNEL, 1);
    curl_setopt($ch,
CURLOPT_PROXY, 
'fakeproxy.com:1080');
    curl_setopt($ch,
CURLOPT_PROXYUSERPWD, 
'user:password');
    $data =
curl_exec();
    curl_close($ch);
?

>

关于SSL和Cookie

关于SSL也就是HTTPS协议,你仅仅须要把CURLOPT_URL连接中的http://变成https://就能够了。当然,另一个參数叫CURLOPT_SSL_VERIFYHOST能够设置为验证网站。

关于Cookie,你须要了解以下三个參数:

  • CURLOPT_COOKIE,在当面的会话中设置一个cookie
  • CURLOPT_COOKIEJAR。当会话结束的时候保存一个Cookie
  • CURLOPT_COOKIEFILE,Cookie的文件。

HTTPserver认证

最后。我们来看一看HTTPserver认证的情况

<?

php 

    $ch =
curl_init();
    curl_setopt($ch,
CURLOPT_URL, 
'http://www.example.com');
    curl_setopt($ch,
CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,
CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt(CURLOPT_USERPWD, '[username]:[password]')
    $data =
curl_exec();
    curl_close($ch);
?>

PHP的curl库代码使用的更多相关文章

  1. linux编译curl库的动态库so(转)

    转载请注明出处:帘卷西风的专栏(http://blog.csdn.NET/ljxfblog) curl库是一个很强大的http开源库,c++里面能够很方便的和http服务器交互. 最近项目开始内测,开 ...

  2. 嵌入式 Linux下curl库API简单介绍

    1:CURLcode curl_global_init(long flags); 这个函数全局需要调用一次(多次调用也可以,不过没有必要), 所以这也是把Curlplus设计成单体类的原因,curl_ ...

  3. php的cURL库介绍

    cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.很多小偷程序都是使用这个函数.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的 ...

  4. 采用curl库

    Windows通过使用curl库: 到http://curl.haxx.se/下了个curl的源代码下来,源代码是用VC6编译的,我在VS2005下又一次进行编译.竟然仅仅有一个警告. cUrl的实现 ...

  5. ZH奶酪:PHP的cURL库

    原文链接:http://coolshell.cn/articles/664.html 参考链接:http://www.runoob.com/php/php-ref-curl.html 使用PHP的cU ...

  6. CURL库在C++程序中的运用浅析

    最近由于要做一个爬虫项目,要对很多网站进行爬取,所以一直都在看这方面的文章.在翻阅了很多资料后,下载了一个curl库,着实对项目有了很大的帮助. 一.LibCurl基本编程框架 二.一些基本的函数 三 ...

  7. 转:CURL库在程序中的运用浅析

    CURL库在程序中的运用浅析-nk_ysg-ChinaUnix博客 http://blog.chinaunix.net/uid-22476414-id-3286638.html 这个目录的文章转载fr ...

  8. CURL库的宏定义列表

    列表CURL库一共同拥有17个函数 curl_close:关闭CURL会话 curl_copy_handle:复制一个CURL会话句柄,同一时候3复制其全部參数 curl_errno:返回最后一个错误 ...

  9. [转]linux 下 使用 c / c++ 调用curl库 做通信开发

    example:   1. http://curl.haxx.se/libcurl/c/example.html  2. http://www.libcurl.org/book:  1. http:/ ...

随机推荐

  1. SSH学习之中的一个 OpenSSH基本使用

    在Linux系统中.OpenSSH是眼下最流行的远程系统登录与文件传输应用,也是传统Telenet.FTP和R系列等网络应用的换代产品. 当中,ssh(Secure Shell)能够替代telnet. ...

  2. Apache Pig的前世今生

    近期,散仙用了几周的Pig来处理分析我们站点搜索的日志数据,感觉用起来非常不错,今天就写篇笔记介绍下Pig的由来,除了搞大数据的人,可能非常少有人知道Pig是干啥的.包含一些是搞编程的,但不是搞大数据 ...

  3. Linux3.5内核以后的路由下一跳缓存

    在Linux3.5版本号(包括)之前.存在一个路由cache.这个路由cache的初衷是美好的,可是现实往往是令人遗憾的.下面是陈列得出的两个问题:1.面临针对hash算法的ddos问题(描写叙述该问 ...

  4. 具体验证身份证号码规则和姓名(汉字)的java代码

    一.验证汉字的正則表達式  /** 是否是汉字的正则 */  private String regexIsHanZi = "[\\u4e00-\\u9fa5]+";   * @pa ...

  5. POJ3249 Test for Job(拓扑排序+dp)

    Test for Job Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10137   Accepted: 2348 Des ...

  6. Oracle 11G R2 RAC中的scan ip 的用途和基本原理

    Oracle 11G R2 RAC增加了scan ip功能,在11.2之前,client链接数据库的时候要用vip,假如你的cluster有4个节点,那么客户端的tnsnames.ora中就对应有四个 ...

  7. jquery中命名冲突问题

    例如用jq代替$符号 var jq = $.noConflict()

  8. 解决Highcharts指针偏离的问题

    Highcharts 在初始化3D柱状图 时 (注意:3D图形会发生偏移,2D显示正常) 如果加入 shared: true,属性,则可能会导致柱 状图 toolTip提示框偏移,解决方法是去掉或注释 ...

  9. 一个Python项目的创建架构

    要进行Python项目的编写,很多人刚开始一筹莫展,不知道该如何去构建一个项目,现在粗略的描述一下一个项目的创建过程,供大家参考了解一下: 大家可以先忽略其中创建的函数 ,每个包的含义都有定义,大家可 ...

  10. 压力测试工具 Tinyget

    Tinyget 压力测试工具使用方法为:命令行切换到工具所在路径下,然后输入压力命令.如:tinyget -srv:localhost -uri:/FeaturedProdu1cts.aspx -th ...