通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便大笑),curl_setopt 是PHP的一个扩展库
使用条件:需要在php.ini 中配置开启。(PHP 4 >= 4.0.2)
//取消下面的注释
extension=php_curl.dll
在Linux下面,需要重新编译PHP了,编译时,你需要打开编译参数——在configure命令上加上“–with-curl” 参数。
1、 一个抓取网页的简单案例:
1
2
3
4
5
6
7
8
9
10
|
[php] view plain copy print ? // 创建一个新cURL资源 $ch = curl_init(); // 设置URL和相应的选项 curl_setopt( $ch , CURLOPT_URL, "http://www.baidu.com/" ); curl_setopt( $ch , CURLOPT_HEADER, false); // 抓取URL并把它传递给浏览器 curl_exec( $ch ); //关闭cURL资源,并且释放系统资源 curl_close( $ch ); |
2、POST数据案例:
1
2
3
4
5
6
7
8
9
10
11
12
|
[php] view plain copy print ? // 创建一个新cURL资源 $ch = curl_init(); $data = 'phone=' . urlencode( $phone ); // 设置URL和相应的选项 curl_setopt( $ch , CURLOPT_URL, "http://www.post.com/" ); curl_setopt( $ch , CURLOPT_POST, 1); curl_setopt( $ch , CURLOPT_POSTFIELDS, $data ); // 抓取URL并把它传递给浏览器 curl_exec( $ch ); //关闭cURL资源,并且释放系统资源 curl_close( $ch ); |
3、关于SSL和Cookie
关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。
关于Cookie,你需要了解下面三个参数:
- CURLOPT_COOKIE,在当面的会话中设置一个cookie
- CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie
- CURLOPT_COOKIEFILE,Cookie的文件。
PS:新浪微博登陆API部分截取(部分我增加了点注释,全当参数翻译下。哈哈) 有兴趣的自己研究,自己挪为己用。嘿嘿
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
[php] view plain copy print ? /** * Make an HTTP request * * @return string API results * @ignore */ function http( $url , $method , $postfields = NULL, $headers = array ()) { $this ->http_info = array (); $ci = curl_init(); /* Curl settings */ curl_setopt( $ci , CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); //让cURL自己判断使用哪个版本 curl_setopt( $ci , CURLOPT_USERAGENT, $this ->useragent); //在HTTP请求中包含一个"User-Agent: "头的字符串。 curl_setopt( $ci , CURLOPT_CONNECTTIMEOUT, $this ->connecttimeout); //在发起连接前等待的时间,如果设置为0,则无限等待 curl_setopt( $ci , CURLOPT_TIMEOUT, $this ->timeout); //设置cURL允许执行的最长秒数 curl_setopt( $ci , CURLOPT_RETURNTRANSFER, TRUE); //返回原生的(Raw)输出 curl_setopt( $ci , CURLOPT_ENCODING, "" ); //HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 curl_setopt( $ci , CURLOPT_SSL_VERIFYPEER, $this ->ssl_verifypeer); //禁用后cURL将终止从服务端进行验证 curl_setopt( $ci , CURLOPT_HEADERFUNCTION, array ( $this , 'getHeader' )); //第一个是cURL的资源句柄,第二个是输出的header数据 curl_setopt( $ci , CURLOPT_HEADER, FALSE); //启用时会将头文件的信息作为数据流输出 switch ( $method ) { case 'POST' : curl_setopt( $ci , CURLOPT_POST, TRUE); if (! empty ( $postfields )) { curl_setopt( $ci , CURLOPT_POSTFIELDS, $postfields ); $this ->postdata = $postfields ; } break ; case 'DELETE' : curl_setopt( $ci , CURLOPT_CUSTOMREQUEST, 'DELETE' ); if (! empty ( $postfields )) { $url = "{$url}?{$postfields}" ; } } if ( isset( $this ->access_token) && $this ->access_token ) $headers [] = "Authorization: OAuth2 " . $this ->access_token; $headers [] = "API-RemoteIP: " . $_SERVER [ 'REMOTE_ADDR' ]; curl_setopt( $ci , CURLOPT_URL, $url ); curl_setopt( $ci , CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ci , CURLINFO_HEADER_OUT, TRUE ); $response = curl_exec( $ci ); $this ->http_code = curl_getinfo( $ci , CURLINFO_HTTP_CODE); $this ->http_info = array_merge ( $this ->http_info, curl_getinfo( $ci )); $this ->url = $url ; if ( $this ->debug) { echo "=====post data======\r\n" ; var_dump( $postfields ); echo '=====info=====' . "\r\n" ; print_r( curl_getinfo( $ci ) ); echo '=====$response=====' . "\r\n" ; print_r( $response ); } curl_close ( $ci ); return $response ; } |
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!
原文链接:http://blog.csdn.net/liuxinmingcode/article/details/8043150