【问题标题】:Curl request fails卷曲请求失败
【发布时间】:2011-06-30 06:43:34
【问题描述】:

我有一个小问题。我想使用 curl 加载此页面“http://www.facebook.com/feeds/page.php?id=57084011597&format=rss20”。这是我尝试不使用的代码,但我无法从中得到任何回报。

    $head=array('Accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                    'Accept-Charset'=>'ISO-8859-2,utf-8;q=0.7,*;q=0.3',
                    'Accept-Encoding'=>'gzip,deflate,sdch',
                    'Accept-Language'=>'ro-RO,ro;q=0.8,en-US;q=0.6,en;q=0.4',
                    'Cache-Control'=>'max-age=0',
                    'Connection'=>'keep-alive',
                    'Cookie'=>'datr=hroHTi2NZk2KleOaswb03Q_Q; lu=gg9lJcPeInHt6hnut7bviqQg; locale=en_US; e=n; L=2; c_user=100000596376783; sct=1309129360; xs=2%3Ad05dd80e364608525dd664ad73f6483f; act=1309410851554%2F5; presence=EM309410852L4N0_5dEp_5f1B00596376783F1X309410852168Y0Z11G309410768PCC',
                    'Host'=>'www.facebook.com',
                    'User-Agent'=>$_SERVER['HTTP_USER_AGENT']);  
$url='http://www.facebook.com/feeds/page.php?id=57084011597&format=rss20';
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
    curl_setopt($ch, CURLOPT_HTTPHEADER,$head);
     $result = curl_exec($ch);

        return $result;

我试过不设置标题,但也没有用。 希望有人能给我一个线索。

谢谢!

【问题讨论】:

  • curl_error() 说什么?
  • 是的,你得到的 curl 错误或 PHP 错误是什么?
  • 为什么需要此页面的标题?它已经是一个 RSS 提要,我认为设置这些标题不会有太大区别,对吧?
  • 错误响应中没有任何内容:(

标签: php xml curl xml-parsing


【解决方案1】:

这是你的问题:$ur='http://www.facebook.com/feeds/page.php?id=57084011597&format=rss20';。你少了一个“l”。

$url='http://www.facebook.com/feeds/page.php?id=57084011597&format=rss20';

另外,还有一个重定向,所以你需要添加:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

这是我发现的。我使用curl_setopt($ch, CURLOPT_VERBOSE, true); 启用了详细输出并看到了这个:

< HTTP/1.1 302 Found
< Location: http://www.facebook.com/common/browser.php
< Content-Type: text/html; charset=utf-8
< X-FB-Server: 10.43.97.37
< X-Cnection: close
< Date: Thu, 30 Jun 2011 06:48:54 GMT
< Content-Length: 0

更新、测试和工作:

Facebook 需要指定一个用户代理字符串。使用curl_setopt($ch, CURLOPT_USERAGENT, '...'); 设置它似乎可以解决问题。这是一个过于简单的示例,应该可以解决您的问题:

<?php

$ch = curl_init('http://www.facebook.com/feeds/page.php?id=57084011597&format=rss20');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, array('User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Safari/534.45'));

$response = curl_exec($ch);

【讨论】:

  • 对不起$url。在原始文档中,设置很好,我添加了 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);它说我的浏览器不兼容。这意味着什么?我也试过不带标题,但响应是一样的
  • @Iosub - 我是通过终端(命令行)在我的 Mac 上完成的。我确实收到了同样的通知。我通过 Google 读到 RSS 提要需要一个您的似乎没有的“密钥”。我假设您需要“登录”或传递有效密钥才能下载内容。
  • 我也试过了。我已注销并访问该网址。我仍然能够在我的浏览器窗口中看到该内容,但是再次使用 curl
  • @Iosub - 您需要设置用户代理。请参阅我的更新答案。我已经测试了底部的简短示例并且它有效。不需要标题或其他任何东西。
  • 好教程。设置用户代理解决我的问题
猜你喜欢
  • 1970-01-01
  • 2016-02-29
  • 2011-04-22
  • 2019-07-07
  • 2022-01-07
  • 2018-09-20
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多