[PHP学习教程]006.获取网页内容(URL Content)

引言:获取网页内容是我们实现网页操作的基本之基本,今天这一讲,我们和大家讲一下基本请求网页内容的几种方法。

我们似乎每天都要做这样一件事情,打开一个浏览器,输入网址,回车,一个空白的页面顿时有了东西,它可能是百度之类的搜索页面,或是一个挤满了文字和图片的门户网站。

我们可以从三个方面理解这个过程,一个是浏览器,二个是服务器,第三个是浏览器和服务器之间通信的协议。

当然,我们今天不讲<网页请求过程 >

这一次,我们说一下如何用PHP代码请求网页内容。

获取网页内容方法



1.file_get_contents+[请求方式:GET]

<?php
$url  = ‘http://do.org.cn‘;
$html = file_get_contents($url);
echo $html;
?> 

2.file_get_contents+[请求方式:POST]

无需Cookie操作,则使用以下方式:

<?php
$url    = ‘http://do.org.cn/upload.php‘;
$data   = http_build_query(array(‘foo‘ => ‘bar‘));
$params = array(
    ‘http‘ => array(
        ‘method‘  => ‘POST‘,
        ‘content‘ => $data,
        ‘header‘  =>
            "Content-type: application/x-www-form-urlencoded\r\n" .
            "Content-Length: " . strlen($data) . "\r\n"
    )
);
$context = stream_context_create($params);
$html    = @file_get_contents($url, ‘‘, $context); 

有需Cookie操作,则在$params里的‘header‘添加下一行(类似如下文):

"cookie:cookie1=c1;cookie2=c2\r\n" ;

3.fopen+[请求方式:GET]

<?php
// 尝试打开网页
$fp = fopen($url, ‘r‘);
// 获取报头信息
$header = stream_get_meta_data($fp);
while (!feof($fp)) {
    $result .= fgets($fp, 1024);
}
fclose($fp);
// 输出结果
echo "url header: {$header} <br/>";
echo "url body: $result";
?> 

4.fopen+[请求方式:POST]

<?php
$data   = http_build_query(array(‘foo1‘ => ‘bar1‘, ‘foo2‘ => ‘bar2‘));
$params = array(
    ‘http‘ => array(
        ‘method‘  => ‘POST‘,
        ‘content‘ => $data,
        ‘header‘  => "Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n" .
        "Content-Length: " . strlen($data) . "\r\n"
    )
); 

$context = stream_context_create($params);
$fp      = fopen(‘http://do.org.cn/upload.php‘, ‘rb‘, false, $context);
$content = fread($fp, 1024);
fclose($fp);
echo $content;
?>

5.fsockopen+[请求方式:GET]

用fsockopen函数打开网址URL,以GET方式请求完整的数据,包括header和body.

<?php
function get_url($url, $cookie=false) {
    $url   = parse_url($url);
    $query = $url[path]. "?" .$url[query];
    echo "Query:" . $query;
    $fp = fsockopen($url[host], $url[port] ? $url[port] : 80, $errno, $errstr, 30);
    if (!$fp) {
        return false;
    } else {
        $request  = "GET $query HTTP/1.1\r\n";
        $request .= "Host: $url[host]\r\n";
        $request .= "Connection: Close\r\n";
        if ($cookie) {
            $request.="Cookie: $cookie\r\n";
        }
        $request .= "\r\n";
        fwrite($fp, $request);
        while ([email protected]feof($fp)) {
            $result .= @fgets($fp, 1024);
        }
        fclose($fp);
        return $result;
    }
}
// 获取url的html部分,去掉header
function get_html($url, $cookie=false) {
    $data = get_url($url, $cookie);
    if ($data) {
        $body = stristr($data, "\r\n\r\n");
        $body = substr($body, 4, strlen($body));
        return $body;
    }
    return false;
}
?> 

6.fsockopen+[请求方式:POST]

用fsockopen函数打开网址URL,以POST方式请求完整的数据,包括header和body.

<?php
function post_url($url, $data, $cookie, $referrer="") {
    // parsing the given URL
    $url_info = parse_url($url); 

    // Building referrer
    if ($referrer == "") { // if not given use this script as referrer
        $referrer = "111";
    } 

    // making string from $data
    foreach ($data as $key => $value) {
        $values[] = "$key=" . urlencode($value);
    }
    $data_string = implode("&", $values); 

    // Find out which port is needed - if not given use standard (=80)
    if (!isset($url_info["port"])) {
        $url_info["port"] = 80;
    }

    // building POST-request:
    $request .= "POST ".$url_info["path"]." HTTP/1.1\n";
    $request .= "Host: ".$url_info["host"]."\n";
    $request .= "Referer: $referer\n";
    $request .= "Content-type: application/x-www-form-urlencoded\n";
    $request .= "Content-length: ".strlen($data_string)."\n";
    $request .= "Connection: close\n";
    $request .= "Cookie: $cookie\n";
    $request .= "\n";
    $request .= $data_string."\n"; 

    $fp = fsockopen($url_info["host"], $url_info["port"]);
    fputs($fp, $request);
    while (!feof($fp)) {
        $result .= fgets($fp, 1024);
    }
    fclose($fp); 

    return $result;
}
?>

7.curl库

注意:使用curl库之前,需要查看一下php.ini是否已经打开了curl扩展.

<?php
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, ‘http://do.org.cn/‘);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$content = curl_exec($ch);
curl_close($ch); 

echo $content;
?>

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4805187.html

时间: 2024-10-21 11:20:02

[PHP学习教程]006.获取网页内容(URL Content)的相关文章

Python实战:Python爬虫学习教程,获取电影排行榜

Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本文是在前一部分Python基础之上程序员带你十天快速入门Python,玩转电脑软件开发(四),再次进行的Python爬虫实战课程. 正则表达式实例简单详解 正则表达式干什么用? 就是在字符串中提取我们需要的内容的. 记得哦,要先引用正则表达式模块的哦. re就是正则表达式相

[PHP学习教程]006.偷龙转凤技巧10则(Remember Tips)

引言:PHP当中的一些猬锁技巧,比较基础,想起就发贴总结一下,老鸟换个姿势飘过去就是. [技巧]应该属于“方法”的一个范畴,主要指对一种生活或工作方法的熟练和灵活运用.[五笔]RFAG. 话不多说,下面就列一列! 字符串操作 1.str_replace+[文本替换] 文本替换是极其常用的PHP函数,非常常常常常常常用,经常看到有一些兄弟写一大堆str_replace只为循环对一个原始字符串进行内容替换,实在是惨不忍睹. 比如: $str = '大象的尿尿盆 --- do.org.cn'; $st

[PHP学习教程 - 网络]003.获得当前访问的页面URL(Current Request URL)

引言:获取当前请求的URL路径,自动判断协议(HTTP or HTTPS). 一句话的事情,下面直接上高清无MSK的精妙代码! 功能函数 获得当前请求的页面路径(URL)地址 语法:$url = getPageUrl() 返回结果: string-请求URL /** * 获取当前页面地址 * * @author do.org.cn#AC */ function getPageUrl() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == &quo

定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)

1 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) 2 import urllib.request 3 4 def get_page(url): 5 response = urllib.request.urlopen(url) 6 html = response.read() 7 return html 8 9 print(get_page(url='https://www.baidu,com'))

C# 网络编程之webBrowser获取网页url和下载网页中图片

该文章主要是通过C#网络编程的webBrowser获取网页中的url并简单的尝试下载网页中的图片,主要是为以后网络开发的基础学习.其中主要的通过应用程序结合网页知识.正则表达式实现浏览.获取url.下载图片三个功能.而且很清晰的解析了每一步都是以前一步为基础实现的. 一.界面设计 界面设计如下图所示,添加控件如图,设置webBrowser1其Anchor属性为Top.Bottom.Left.Right,实现对话框缩放;设置groupBox1其Dock(定义要绑到容器控件的边框)为Buttom,实

Docker学习教程笔记整合(完整)

Docker学习教程笔记整合(完整) 本文主要是整理了DockerOne组织翻译的Flux7的Docker入门教程,通过markdown记录,方便离线学习.原文地址,http://dockone.io/article/101. 文中一些链接可能会跳转国外的网站,如果没有插件或开VPN的朋友,可以尝试修改一下Hosts文件,如何修改Hosts文件.或者使用XXNet插件,如何使用XXnet 介绍 Docker是一个新的容器化的技术,它轻巧,且易移植,号称"build once, configure

PHP 使用 stream_get_meta_date ,stream_get_contents 获取网页内容

PHP 使用 获取网页内容: if (! preg_match('@^https?://@', $url)) { die('HTTP(s) only.'); } $httpOpts = array( 'max_redirects' => 0 ,'timeout' => 3 ); if ($ua !== '') { $httpOpts['user_agent'] = $ua; } if ($cook !== '') { $httpOpts['header'] = "Cookie: {$

java获取网页内容保存到文件

package com.mkyong;   import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.U

【ExtJS 4.x学习教程】(5)数据包(The Data Package)

作者:周邦涛(Timen) Email:[email protected] 转载请注明出处:  http://blog.csdn.net/zhoubangtao/article/details/27707361 1. 简介 数据包主要负责加载和保存你应用程序的所有数据,它包含41个类,但是其中三个是最重要的-- Model,Store和Ext.data.proxy.Proxy.这三个类几乎在每个应用程序都有使用,并且有很多卫星类作支持. 2. Model和Store data包的核心是Ext.d