Heim > Backend-Entwicklung > PHP-Tutorial > PHP Curl implementiert Offsite-Sammlung (empfohlen)

PHP Curl implementiert Offsite-Sammlung (empfohlen)

PHPz
Freigeben: 2023-03-07 09:32:01
Original
1704 Leute haben es durchsucht

curl ist eine Bibliothek, die speziell für die Netzwerkinteraktion verwendet wird. Sie bietet eine Reihe von Anpassungsoptionen für den Umgang mit verschiedenen Umgebungen. Die Stabilität ist natürlich größer als bei file_get_contents.

Grund für die Wahl von Curl

In Bezug auf Curl und file_get_contents finden Sie hier einen leicht verständlichen Vergleich:

file_get_contents ist eigentlich eine zusammengeführte Version einer Reihe integrierter Dateioperationsfunktionen wie file_exists, fopen, fread, fclose, Speziell für faule Benutzer bereitgestellt. Es wird hauptsächlich für den Umgang mit lokalen Dateien verwendet. Aufgrund fauler Benutzer wird jedoch auch Unterstützung für Netzwerkdateien hinzugefügt.
Curl ist eine Bibliothek, die speziell für die Netzwerkinteraktion verwendet wird Benutzerdefinierte Heap-Optionen werden für den Umgang mit unterschiedlichen Umgebungen verwendet und ihre Stabilität ist natürlich größer als die von file_get_contents.

So verwenden Sie

1. Aktivieren Sie die Curl-Unterstützung

Da die Curl-Unterstützung nach der Installation der PHP-Umgebung nicht standardmäßig aktiviert ist, Sie müssen die Datei php.ini ändern, „extension=php_curl.dll“ finden, den Doppelpunkt davor entfernen und den Dienst neu starten;

2. Verwenden Sie Curl, um Daten zu erfassen

Der Code lautet wie folgt:

// 初始化一个 cURL 对象 
$curl = curl_init(); 
// 设置你需要抓取的URL 
curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn'); 
// 设置header 
curl_setopt($curl, CURLOPT_HEADER, 1); 
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
// 运行cURL,请求网页 
$data = curl_exec($curl); 
// 关闭URL请求 
curl_close($curl);
Nach dem Login kopieren
3. Finden Sie Schlüsseldaten durch regelmäßigen Abgleich

Der Code lautet wie folgt:

//$data是curl_exec返回的的值,即采集的目标内容 
preg_match_all("/<li class=\"item\">(.*?)<\/li>/",$data, $out, PREG_SET_ORDER); 
foreach($out as $key => $value){ 
    //此处$value是数组,同时记录找到带匹配字符的整句和单独匹配的字符 
    echo &#39;匹配到的整句:&#39;.$value[0].&#39;
&#39;; 
    echo &#39;单独匹配到的:&#39;.$value[1].&#39;
&#39;; 
}
Nach dem Login kopieren
Techniken

1 . Timeout-bezogene Einstellungen

Über curl_setopt( $ch, opt) können einige Timeout-Einstellungen festgelegt werden, darunter hauptsächlich:

CURLOPT_TIMEOUT legt die maximale Anzahl von Sekunden fest, die cURL ausführen darf.

CURLOPT_TIMEOUT_MS legt die maximale Anzahl von Millisekunden fest, die cURL ausführen darf. (Hinzugefügt in cURL 7.16.2. Verfügbar ab PHP 5.2.3.)
CURLOPT_CONNECTTIMEOUT Die Zeit, die vor dem Initiieren einer Verbindung gewartet werden soll. Wenn sie auf 0 gesetzt ist, wird auf unbestimmte Zeit gewartet.
CURLOPT_CONNECTTIMEOUT_MS Die Zeit, die auf einen Verbindungsversuch gewartet wird, in Millisekunden. Wenn auf 0 gesetzt, unendlich warten. Hinzugefügt in cURL 7.16.2. Verfügbar ab PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT legt die Zeit zum Speichern von DNS-Informationen im Speicher fest. Der Standardwert beträgt 120 Sekunden.

Der Code lautet wie folgt:

curl_setopt($ch, CURLOPT_TIMEOUT, 60);   //只需要设置一个秒的数量就可以 
curl_setopt($ch, CURLOPT_NOSIGNAL, 1);    //注意,毫秒超时一定要设置这个 
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);  //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用
Nach dem Login kopieren
2. Daten per Post übermitteln und Cookies aufbewahren

Der Code lautet wie folgt:

//以下摘抄一个例子过来,用于学习借鉴: 
//Curl 模拟登录 discuz 程序,适合DZ7.0 
!extension_loaded(&#39;curl&#39;) && die(&#39;The curl extension is not loaded.&#39;);    
$discuz_url = &#39;http://www.lxvoip.com&#39;;//论坛地址    
$login_url = $discuz_url .&#39;/logging.php?action=login&#39;;//登录页地址    
$get_url = $discuz_url .&#39;/my.php?item=threads&#39;; //我的帖子    
$post_fields = array();    
//以下两项不需要修改    
$post_fields[&#39;loginfield&#39;] = &#39;username&#39;;    
$post_fields[&#39;loginsubmit&#39;] = &#39;true&#39;;    
//用户名和密码,必须填写    
$post_fields[&#39;username&#39;] = &#39;lxvoip&#39;;    
$post_fields[&#39;password&#39;] = &#39;88888888&#39;;    
//安全提问    
$post_fields[&#39;questionid&#39;] = 0;    
$post_fields[&#39;answer&#39;] = &#39;&#39;;    
//@todo验证码    
$post_fields[&#39;seccodeverify&#39;] = &#39;&#39;;    
//获取表单FORMHASH    
$ch = curl_init($login_url);    
curl_setopt($ch, CURLOPT_HEADER, 0);    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
$contents = curl_exec($ch);    
curl_close($ch);    
preg_match(&#39;/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i&#39;, $contents, $matches);    
if(!empty($matches)) {    
    $formhash = $matches[1];    
} else {    
    die(&#39;Not found the forumhash.&#39;);    
}    
//POST数据,获取COOKIE    
$cookie_file = dirname(__FILE__) . &#39;/cookie.txt&#39;;    
//$cookie_file = tempnam(&#39;/tmp&#39;);    
$ch = curl_init($login_url);    
curl_setopt($ch, CURLOPT_HEADER, 0);    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
curl_setopt($ch, CURLOPT_POST, 1);    
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);    
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);    
curl_exec($ch);    
curl_close($ch);    
//带着上面得到的COOKIE获取需要登录后才能查看的页面内容    
$ch = curl_init($get_url);    
curl_setopt($ch, CURLOPT_HEADER, 0);    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);    
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);    
$contents = curl_exec($ch);    
curl_close($ch);    
var_dump($contents);
Nach dem Login kopieren


Das obige ist der detaillierte Inhalt vonPHP Curl implementiert Offsite-Sammlung (empfohlen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage