我在一个网站上工作,这应该是完全可见的用户在一个地方,Facebook.com是禁止他们。这样我的Facebook类插件就不会出现在他们面前了。(为了不本地化这个问题,假设我想绕过所有客户端防火墙,并在我的网站中显示类似于框插件的简单HTML (我的网站在那里不被禁止))。
我的服务器可以访问Facebook.com,我想我可以使用curl (在服务器的计算机上)获取插件的内容,然后在我的网站的任何部分执行并显示该页面的内容。所以我只写了下面的脚本:
<?
$c = curl_init('https://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fstevejobs&width=292&height=258&colorscheme=dark&show_faces=true&border_color&stream=false&header=false');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: www.facebook.com', 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Accept-Encoding: gzip, deflate'));
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt(CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$html = curl_exec($c);
if (curl_error($c))
die(curl_error($c));
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
?>令人惊讶的是,上面的代码可以在https://www.youtube.com(在那里也是被禁止的)或https://www.google.com上工作,但不能在我的服务器上使用这个网址,甚至不能简单地使用https://www.facebook.com。
另一个问题:如果我使用https://www.youtube.com而不是Facebook.com,我仍然无法获得在YouTube.com中使用的CSS文件或Javascript文件(因为它们也是被禁止的,客户端也不能下载)。我只能看到文本和一些图片。我还希望curl自动获取CSS和Javascript文件的内容。
我也使用了YQL来从Facebook.com中获取like box插件的内容,但我得到了以下结果:
YQL语句:
select * from html where url = 'https://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fstevejobs&width=292&height=258&colorscheme=dark&show_faces=true&border_color&stream=false&header=false'结果:
<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
yahoo:count="0" yahoo:created="2011-11-11T11:41:10Z" yahoo:lang="en-US">
<diagnostics>
<publiclyCallable>true</publiclyCallable>
<url
error="Redirected to a robots.txt restricted URL: https://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fstevejobs&amp;width=292&amp;height=258&amp;colorscheme=dark&amp;show_faces=true&amp;border_color&amp;stream=false&amp;header=false"
execution-start-time="1" execution-stop-time="6"
execution-time="5" http-status-code="403"
http-status-message="Forbidden" proxy="DEFAULT"><![CDATA[https://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fstevejobs&width=292&height=258&colorscheme=dark&show_faces=true&border_color&stream=false&header=false]]></url>
<user-time>6</user-time>
<service-time>5</service-time>
<build-version>23377</build-version>
</diagnostics>
<results/>
</query>看起来facebook.com的robots.txt有一些问题。我要提到的是,上面的YQL声明适用于其他网站(如https://www.youtube.com或https://www.yahoo.com )。
提前感谢
发布于 2011-11-17 14:50:18
您的代码中存在以下错误:
1-在代码的所有部分中将$c更改为$ch。
2-在curl_exec函数后添加"echo $html“。
Dan 3-正如@在评论中提到的,CURLOPT_HTTPHEADER不是必需的。只需删除它即可。
4-设置curlopt_cookiejar不是必须的,但我总是用curl设置它。(只是为了确保一切正常)
5-删除<!DOCTYPE之前的所有内容以正确显示内容。
尝试以下代码:
$ch = curl_init('https://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fstevejobs&width=292&height=258&colorscheme=dark&show_faces=true&border_color&stream=false&header=false');
curl_setopt($ch, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_COOKIEJAR , "facebookcookies");
curl_setopt($ch, CURLOPT_URL,"https://www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fstevejobs&width=292&height=258&colorscheme=dark&show_faces=true&border_color&stream=false&header=false");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$html = curl_exec($ch);
//remove everything before <!DOCTYPE
echo preg_replace('/^[^<!]*<!\s*/', '<!', $html);
if (curl_error($ch))
die(curl_error($ch));
// Get the status code
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);https://stackoverflow.com/questions/8093644
复制相似问题