cURL 获取 facebook api 页面

Posted

技术标签:

【中文标题】cURL 获取 facebook api 页面【英文标题】:cURL fetch a facebook api page 【发布时间】:2011-10-23 09:46:14 【问题描述】:

我什至不知道我在这里做错了什么。我的脑袋都乱了。

所以基本上我想获取https://www.facebook.com/dialog/stream.publish?access_token=bla-bla 这个页面以获取一些表单数据。 我正在为此使用 php cURL lib。我的实际代码库就像--

$furl='https://www.facebook.com/dialog/stream.publish?access_token=bla-bla&other-pram';
$cookie_string="";
foreach( $_COOKIE as $key => $value ) 
  $cookie_string .= "$key=$value;";
;
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$furl);
curl_setopt ($curl, CURLOPT_REFERER,'my domain');
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($curl, CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt ($curl, CURLOPT_COOKIE,$cookie_string); 
curl_setopt($curl, CURLOPT_ENCODING, "");
$buffer = curl_exec($curl);
curl_close($curl);
//var_dump($buffer);
if (empty($buffer))

    print "Sorry,no content.";

else

    print $buffer;

这个 $furl 在浏览器中工作得很好。但是在我的服务器中它显示了类似的东西--

HTTP/1.1 200 OK Cache-Control: private, no-cache, no-store, must-revalidate: Sat, 01 Jan 2000 00:00:00 GMT P3P: CP="Facebook 没有 P3P 策略. 在这里了解原因:http://fb.me/p3p" Pragma: no-cache Set-Cookie: __utma=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly Set-Cookie: __utmb=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly Set-Cookie: __utmc=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly Set-Cookie: __utmz=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 设置 Cookie:_e_Jjuf_0=已删除;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly Set-Cookie: c1=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 设置 Cookie:c2_top=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 设置 Cookie:ck_expr=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 设置 Cookie:ckmsg=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 设置 Cookie:datr=vG1BThzB5emc65eco5mEIJt-;到期=格林威治标准时间 2013 年 8 月 8 日星期四 17:26:20;路径=/;域=.facebook.com; httponly Set-Cookie: fb_ss=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 设置 Cookie:fbs_undefined=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 设置 Cookie:locale=en_US;到期=格林威治标准时间 2011 年 8 月 16 日星期二 17:26:20;路径=/;域=.facebook.com 设置 Cookie:lsd=_G6Yd;路径=/;域=.facebook.com 设置 Cookie:PHPSESSID=已删除;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly Set-Cookie: wd=deleted;过期=周四,1970 年 1 月 1 日 00:00:01 GMT;路径=/;域=.facebook.com; httponly 内容编码:gzip 内容类型:text/html; charset=utf-8 X-FB-Server: 10.63.23.62 X-Cnection: close Transfer-Encoding: chunked Date: Tue, 09 Aug 2011 17:26:20 GMT

所以这意味着我已注销。但我可以从浏览器访问 FB。是否必须更改 cURL ??我什至不明白从哪里开始寻找...... :-[ 任何帮助将不胜感激。

编辑:代码已更新。

【问题讨论】:

【参考方案1】:

您正在使用 POST 方法,该方法通常用于将数据发送到站点。您很可能想改用 GET。由于 GET 是 curl 的默认设置,如果您没有另外指定,只需删除 CURLOPT_POST 行。

【讨论】:

是的,你是对的。但现在它显示LOGOUT问题。An error occurred with MyAppName. Please try again later.这是为什么?因为我已经发送了accessToken..那么问题在哪里......?? 记住 curl 在你的服务器上运行并且完全/完全独立于你的浏览器在做什么。如果您希望 curl 从 FB 获取需要登录的内容,则必须使用 curl 复制登录过程。 这就是我所说的 n 我说我已经有当前会话用户的 AccessToken n 我不知道用户的登录详细信息。所以这也无济于事。

以上是关于cURL 获取 facebook api 页面的主要内容,如果未能解决你的问题,请参考以下文章

Facebook使用cURL和PHP登录

Parse 的 REST API 和 PHP Curl 请求 - 如何

使用 graph Api 获取 Facebook 页面事件

如何使用一个 Facebook API 调用获取用户帐户(页面)描述?

使用 Graph api 获取 Facebook 页面率和评论

使用没有访问令牌的 Facebook Graph API 获取公共页面状态