Table des matières
HTTP
FTP
Local
Maison php教程 php手册 php获取远程网页源码的程序代码

php获取远程网页源码的程序代码

Jun 02, 2016 am 09:13 AM
explode fopen foreach request substr

有时我们需要做一些采集需要下载远程网页源码到本来了,在这里我们整理了一些php获取远程网页源码代码,希望对各位会有所帮助。

php的curl函数

基本例子

<?php
// 初始化一个 cURL 对象
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, &#39;http://www.phprm.com&#39;);
// 设置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);
?>
Copier après la connexion

php fopen函数

<?php
print ("<h1 id="HTTP">HTTP</h1>n");
// open a file using http protocol
if (!($myFile = fopen("http://www.phprm.com/", "r"))) {
    print ("file could not be opened");
    exit;
}
while (!feof($myFile)) {
    // read a line from the file
    $myLine = fgetss($myFile, 255);
    print ("$myLine <BR>n");
}
// close the file
fclose($myFile);
print ("<h1 id="FTP">FTP</h1>n");
print ("<HR>n");
// open a file using ftp protocol
if (!($myFile = fopen("ftp://ftp.php.net/welcome.msg", "r"))) {
    print ("file could not be opened");
    exit;
}
while (!feof($myFile)) {
    // read a line from the file
    $myLine = fgetss($myFile, 255);
    print ("$myLine <BR>n");
}
// close the file
fclose($myFile);
print ("<h1 id="Local">Local</h1>n");
print ("<HR>n");
// open a local file
if (!($myFile = fopen("data.txt", "r"))) {
    print ("file could not be opened");
    exit;
}
while (!feof($myFile)) {
    // read a line from the file
    $myLine = fgetss($myFile, 255);
    print ("$myLine <BR>n");
}
// close the file
fclose($myFile);
?>
Copier après la connexion

file_get_contents函数

<?php
file_get_contents(&#39;http://www.phprm.com/&#39;);
?>
Copier après la connexion

抓取远程网页源码类

<?php
class HTTPRequest {
    var $_fp; // HTTP socket
    var $_url; // full URL
    var $_host; // HTTP host
    var $_protocol; // protocol (HTTP/HTTPS)
    var $_uri; // request URI
    var $_port; // port
    // scan url
    function _scan_url() {
        $req = $this->_url;
        $pos = strpos($req, &#39;://&#39;);
        $this->_protocol = strtolower(substr($req, 0, $pos));
        $req = substr($req, $pos + 3);
        $pos = strpos($req, &#39;/&#39;);
        if ($pos === false) $pos = strlen($req);
        $host = substr($req, 0, $pos);
        if (strpos($host, &#39;:&#39;) !== false) {
            list($this->_host, $this->_port) = explode(&#39;:&#39;, $host);
        } else {
            $this->_host = $host;
            $this->_port = ($this->_protocol == &#39;https&#39;) ? 443 : 80;
        }
        $this->_uri = substr($req, $pos);
        if ($this->_uri == &#39;&#39;) $this->_uri = &#39;/&#39;;
    }
    // constructor
    function HTTPRequest($url) {
        $this->_url = $url;
        $this->_scan_url();
    }
    // download URL to string
    function DownloadToString() {
        $crlf = "rn";
        // generate request
        $req = &#39;GET &#39; . $this->_uri . &#39; HTTP/1.0&#39; . $crlf . &#39;Host: &#39; . $this->_host . $crlf . $crlf;
        // fetch
        $this->_fp = fsockopen(($this->_protocol == &#39;https&#39; ? &#39;ssl://&#39; : &#39;&#39;) . $this->_host, $this->_port);
        fwrite($this->_fp, $req);
        while (is_resource($this->_fp) && $this->_fp && !feof($this->_fp)) $response.= fread($this->_fp, 1024);
        fclose($this->_fp);
        // split header and body
        $pos = strpos($response, $crlf . $crlf);
        if ($pos === false) return ($response);
        $header = substr($response, 0, $pos);
        $body = substr($response, $pos + 2 * strlen($crlf));
        // parse headers
        $headers = array();
        $lines = explode($crlf, $header);
        foreach ($lines as $line) if (($pos = strpos($line, &#39;:&#39;)) !== false) $headers[strtolower(trim(substr($line, 0, $pos))) ] = trim(substr($line, $pos + 1));
        // redirection?
        if (isset($headers[&#39;location&#39;])) {
            $http = new HTTPRequest($headers[&#39;location&#39;]);
            return ($http->DownloadToString($http));
        } else {
            return ($body);
        }
    }
}
//使用方法
$r = new HTTPRequest(&#39;http://www.phprm.com&#39;);
$str = $r->DownloadToString();
?>
Copier après la connexion


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment déterminer le nombre de boucles foreach en php Comment déterminer le nombre de boucles foreach en php Jul 10, 2023 pm 02:18 PM

Comment déterminer le nombre de boucles foreach en php

Quelle est la différence entre utiliser foreach et iterator pour supprimer des éléments lors de la traversée de Java ArrayList ? Quelle est la différence entre utiliser foreach et iterator pour supprimer des éléments lors de la traversée de Java ArrayList ? Apr 27, 2023 pm 03:40 PM

Quelle est la différence entre utiliser foreach et iterator pour supprimer des éléments lors de la traversée de Java ArrayList ?

Comment résoudre PHP Avertissement : fopen() : échec d'ouverture du flux : aucun fichier ou répertoire de ce type Comment résoudre PHP Avertissement : fopen() : échec d'ouverture du flux : aucun fichier ou répertoire de ce type Aug 19, 2023 am 10:44 AM

Comment résoudre PHP Avertissement : fopen() : échec d'ouverture du flux : aucun fichier ou répertoire de ce type

Que signifie la requête php ? Que signifie la requête php ? Jul 07, 2021 pm 01:49 PM

Que signifie la requête php ?

Comment résoudre PHP Avertissement : fopen() : l'opération SSL a échoué dans file.php à la ligne X Comment résoudre PHP Avertissement : fopen() : l'opération SSL a échoué dans file.php à la ligne X Aug 25, 2023 am 09:22 AM

Comment résoudre PHP Avertissement : fopen() : l'opération SSL a échoué dans file.php à la ligne X

Comment résoudre l'avertissement PHP : fopen() : échec d'ouverture du flux : autorisation refusée Comment résoudre l'avertissement PHP : fopen() : échec d'ouverture du flux : autorisation refusée Aug 20, 2023 pm 01:45 PM

Comment résoudre l'avertissement PHP : fopen() : échec d'ouverture du flux : autorisation refusée

Qu'est-ce que l'objet Request en PHP ? Qu'est-ce que l'objet Request en PHP ? Feb 27, 2024 pm 09:06 PM

Qu'est-ce que l'objet Request en PHP ?

Utilisation de la fonction fopen dans Matlab Utilisation de la fonction fopen dans Matlab Nov 28, 2023 am 11:03 AM

Utilisation de la fonction fopen dans Matlab

See all articles