2011-12-30 13 views
3

出於某種原因,我似乎無法通過cURL獲取此特定網頁的內容。我設法使用cURL來達到「頂級頁面」的內容,但同樣的自建快速cURL函數似乎不適用於其中一個關聯的子網頁。似乎無法通過cURL獲取網頁的內容 - 用戶代理和HTTP頭都設置了?

頂級頁:http://www.deindeal.ch/

一個子頁:http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/

我捲曲功能(在functions.php中)

function curl_get($url) { 
    $ch = curl_init(); 
    $header = array(
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 
    'Accept-Language: en-us;q=0.8,en;q=0.6' 
    ); 
    $options = array(
     CURLOPT_URL => $url, 
     CURLOPT_HEADER => 0, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13', 
     CURLOPT_HTTPHEADER => $header 
     ); 
    curl_setopt_array($ch, $options); 
    $return = curl_exec($ch); 
    curl_close($ch); 

    return $return; 
} 

PHP文件,以獲得內容(使用回聲測試)

require "functions.php"; 
require "phpQuery.php"; 

echo curl_get('http://www.deindeal.ch/deals/hotel-walliserhof-zermatt-2-naechte-30/'); 

到目前爲止,我已經嘗試以下操作來得到這個工作

  • 冉文件在本地(XAMPP)和遠程(LAMP)。
  • 在此處推薦的用戶代理和HTTP標頭中添加file_get_contents and CURL can't open a specific website - 功能curl_get()包含所有選項之前爲當前的所有選項,但CURLOPT_USERAGENT and CURLOPT_HTTPHEADERS`除外。

網站是否可以通過cURL或其他遠程文件打開機制完全阻止請求,而不管提供多少數據來嘗試發出真正的瀏覽器請求?

另外,是否有可能診斷爲什麼我的請求沒有任何變化?

任何幫助回答上述兩個問題,或編輯/建議獲取文件的內容,即使通過不同於cURL的方法將不勝感激;)。

回答

5

嘗試增加:

CURLOPT_FOLLOWLOCATION => TRUE 

到你的選擇。

如果運行在命令行(包括-i看到響應標頭)的簡單捲曲請求,那麼這是很容易看到:

$ curl -i 'http://www.deindeal.ch/deals/hotel-cristal-in-nuernberg-30/' 
HTTP/1.1 302 FOUND 
Date: Fri, 30 Dec 2011 02:42:54 GMT 
Server: Apache/2.2.16 (Debian) 
Vary: Accept-Language,Cookie,Accept-Encoding 
Content-Language: de 
Set-Cookie: csrftoken=d127d2de73fb3bd72e8986daeca86711; Domain=www.deindeal.ch; Max-Age=31449600; Path=/ 
Set-Cookie: generic_cookie=1; Path=/ 
Set-Cookie: sessionid=987b1a11224ecd0e009175470cf7317b; expires=Fri, 27-Jan-2012 02:42:54 GMT; Max-Age=2419200; Path=/ 
Location: http://www.deindeal.ch/welcome/?deal_slug=hotel-cristal-in-nuernberg-30 
Content-Length: 0 
Connection: close 
Content-Type: text/html; charset=utf-8 

正如你可以看到,它返回一個302位置標題。如果您直接點擊該位置,則會收到您正在查找的內容。

並回答你的兩個問題:

  1. 不,這是不 possile以阻止像嫋嫋的請求。如果消費者可以談論HTTP,那麼它可以獲取任何瀏覽器可以訪問的內容。
  2. 使用HTTP代理進行診斷可能對您有所幫助。 Wireshark,提琴手,查爾斯等人。應該會在未來幫助你。或者,像我一樣做,並從命令行發出請求。

編輯
啊,我看你是在談論什麼現在。因此,當您第一次訪問該鏈接時,您將被重定向,並設置Cookie(或Cookie)。一旦你有這些cookie,你的請求按預期完成。

所以,你需要在這個例子中使用cookiejar,如:http://icfun.blogspot.com/2009/04/php-how-to-use-cookie-jar-with-curl.html

所以,你需要做一個初始請求,保存的cookies,讓你的後續請求,包括之後的cookie。

+0

感謝您的信息,並添加'CURLOPT_FOLLOWLOCATION'根據響應標題(重定向到'http://www.deindeal.ch/welcome/?..'),但現在顯然,響應標題顯示與您嘗試訪問瀏覽器中的網址不同的位置。如果我在瀏覽器中訪問網址,我發現自己沒有重定向 - 並且網址被完全請求,但是當發出cURL請求時,提供了不同的位置 - 你知道這可能是爲什麼嗎? – Avicinnian 2011-12-30 02:50:45

+2

看我上面的編輯。 – sberry 2011-12-30 02:59:06