2011-06-29 55 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