2011-06-29 74 views
1

我正在使用PHP cURL從URL中獲取XML輸出。這裏是我的代碼的樣子:無法通過cURL獲取XML輸出

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.mydomain.com?querystring'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, "username:password"); 
$store = curl_exec($ch); 
echo $store; 
curl_close($ch); 

但是,而不是返回XML它只是顯示我的404錯誤頁面。如果我在網絡瀏覽器中鍵入網址http://www.mydomain.com?querystring,我可以在瀏覽器中看到XML。

我在這裏錯過了什麼? :(

感謝。

+0

PHP腳本是否運行o與您的瀏覽器相同的機器?僅僅因爲這個網址在一個地方運行,對於它在另一臺機器上運行的效果絕對沒有意義。 –

+3

@Blueboye - 除了@Marc B的評論,一些網站所有者檢查某些事情的存在,以確保請求來自網絡瀏覽器而不是bot(或cURL)。你應該嘗試添加'curl_setopt($ ch,CURLOPT_USERAGENT,'Mozilla/5.0(compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)');'看看是否解決了這個問題。這將發送一個用戶代理字符串。該網站還可能檢查是否存在Cookie或其他內容。 –

+0

我在本地主機上運行PHP,但ULR是外部服務器。 – Blueboye

回答

2

一些網站所有者檢查存在的一些事情,以確保請求來自web瀏覽器,而不是一個機器人(或捲曲),你應該嘗試添加curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)');,看看是否解決了這個問題。這將發出一個用戶代理字符串。該網站還可以檢查cookie或其他東西的存在。

要輸出的網頁的XML,你需要使用htmlentities()。您可能想要將其封裝在HTML <pre>元素中。

+0

太好了。非常感謝您的快速幫助。 有關我的第二個問題的任何想法:我是否需要將此輸出保存到XML文件中以讀取XML節點,或者我可以不保存呢? – Blueboye

+0

引用['htmlspecialchars()'](http://php.net/manual/en/function.htmlspecialchars.php)是不是更好?實際上,編碼應該在以完全不同的編碼輸出作爲HTML的XML之前被反映。 – hakre

+0

@Blueboy,你可以不用保存。使用DomDocument,使用文件*和*字符串。 – hakre