程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php中get_meta_tags()、CURL與user-agent用法分析

php中get_meta_tags()、CURL與user-agent用法分析

編輯:PHP綜合

本文實例分析了php中get_meta_tags()、CURL與user-agent用法。分享給大家供大家參考。具體分析如下:

get_meta_tags()函數用於抓取網頁中<meta name="A" content="1"><meta name="B" content="2">形式的標簽,並裝入一維數組,name為元素下標,content為元素值,上例中的標簽可以獲得數組:array('A'=>'1', 'b'=>'2'),其他<meta>標簽不處理,並且此函數只處理到</head>標簽時截止,之後的<meta>也不再繼續處理,不過<head>之前的<meta>還是會處理.

user-agent是浏覽器在向服務器請求網頁時,提交的不可見的頭信息的一部分,頭信息是一個數組,包含多個信息,比如本地緩存目錄,cookies等,其中user-agent是浏覽器類型申明,比如IE、Chrome、FF等.

今天在抓取一個網頁的<meta>標簽的時候,總是得到空值,但是直接查看網頁源代碼又是正常的,於是懷疑是否服務器設置了根據頭信息來判斷輸出,先嘗試使用get_meta_tags()來抓取一個本地的文件,然後這個本地文件將獲取的頭信息寫入文件,結果如下,其中替換成了/,方便查看,代碼如下:
復制代碼 代碼如下:array (
  'HTTP_HOST' => '192.168.30.205',
  'PATH' => 'C:/Program Files/Common Files/NetSarang;C:/Program Files/NVIDIA Corporation/PhysX/Common;C:/Program Files/Common Files/Microsoft Shared/Windows Live;C:/Program Files/Intel/iCLS Client/;C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Program Files/Intel/Intel(R) Management Engine Components/DAL;C:/Program Files/Intel/Intel(R) Management Engine Components/IPT;C:/Program Files/Intel/OpenCL SDK/2.0/bin/x86;C:/Program Files/Common Files/Thunder Network/KanKan/Codecs;C:/Program Files/QuickTime Alternative/QTSystem;C:/Program Files/Windows Live/Shared;C:/Program Files/QuickTime Alternative/QTSystem/; %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;',
  'SystemRoot' => 'C:/Windows',
  'COMSPEC' => 'C:/Windows/system32/cmd.exe',
  'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
  'WINDIR' => 'C:/Windows',
  'SERVER_SIGNATURE' => '',
  'SERVER_SOFTWARE' => 'Apache/2.2.11 (Win32) PHP/5.2.8',
  'SERVER_NAME' => '192.168.30.205',
  'SERVER_ADDR' => '192.168.30.205',
  'SERVER_PORT' => '80',
  'REMOTE_ADDR' => '192.168.30.205',
  'DOCUMENT_ROOT' => 'E:/wamp/www',
  'SERVER_ADMIN' => '[email protected]',
  'SCRIPT_FILENAME' => 'E:/wamp/www/user-agent.php',
  'REMOTE_PORT' => '59479',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'SERVER_PROTOCOL' => 'HTTP/1.0',
  'REQUEST_METHOD' => 'GET',
  'QUERY_STRING' => '',
  'REQUEST_URI' => '/user-agent.php',
  'SCRIPT_NAME' => '/user-agent.php',
  'PHP_SELF' => '/user-agent.php',
  'REQUEST_TIME' => 1400747529,
)
果然在數組中沒有HTTP_USER_AGENT這個元素,apache在向另外一台服務器發送請求的時候是沒有UA的,之後查了一下資料,get_meta_tags()函數沒有偽造UA的能力,所以只能使用其他辦法解決了.

後來使用CURL來獲取,就獲取到了網頁,不過使用上稍微麻煩一點,首先偽造UA,獲取之後在使用正則表達式分析<meta>.

偽造辦法,代碼如下:
復制代碼 代碼如下:// 初始化一個 cURL
$curl = curl_init();
 
// 設置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://localhost/user-agent.php');
 
// 設置是否將文件頭輸出到浏覽器,0不輸出
curl_setopt($curl, CURLOPT_HEADER, 0);
 
// 設置UA,這裡是將浏覽器的UA轉發到服務器,也可以手動指定值
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
 
// 設置cURL 參數,要求結果返回到字符串中還是輸出到屏幕上。0輸出屏幕並返回操作結果的BOOL值,1返回字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 運行cURL,請求網頁
$data = curl_exec($curl);
 
// 關閉URL請求
curl_close($curl);
 
// 處理獲得的數據
var_dump($data);

希望本文所述對大家的PHP程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved