1

私は、Facebook.com が禁止されている場所で、ユーザーに完全に表示される必要がある Web サイトに取り組んでいます。そのため、私の Facebook のようなボックス プラグインは表示されません。(この質問をローカライズしないために、すべてのクライアント側のファイアウォールをバイパスし、ボックス プラグインのように、私の Web サイトで単純な HTML として表示したいとします (私の Web サイトは禁止されていません))。

サーバーは Facebook.com にアクセスでき、(サーバーのコンピューターで) curl を使用してプラグインのコンテンツを取得し、そのページのコンテンツを実行して、Web サイトの任意の部分で単純な HTML として表示できると考えました。だから私はちょうど次のスクリプトを書いた:

<?
$c = curl_init('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');

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に対して機能しますが、その URL または単にhttps://www.facebook.comでは機能しません私のサーバー。

別の質問: Facebook.com の代わりにhttps://www.youtube.comを使用しても、YouTube.com で使用されている CSS ファイルまたは Javascript ファイルを取得できません (それらも禁止されており、クライアントがダウンロードできないため)。また)。テキストと一部の画像しか表示されません。また、CSS および Javascript ファイルのコンテンツを curl に自動的に取得させたいと考えています。

Facebook.com から同様のボックス プラグインのコンテンツを取得するために YQL も使用しましたが、次の結果が得られました。

YQL ステートメント:

select * from html where 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'

結果:

    <?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;amp;width=292&amp;amp;height=258&amp;amp;colorscheme=dark&amp;amp;show_faces=true&amp;amp;border_color&amp;amp;stream=false&amp;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&amp;width=292&amp;height=258&amp;colorscheme=dark&amp;show_faces=true&amp;border_color&amp;stream=false&amp;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 ステートメントは他の Web サイト ( https://www.youtube.comhttps://www.yahoo.comなど) でも機能することに注意してください。

前もって感謝します

4

1 に答える 1

2

コードに間違いがあります:

1-コードのすべての部分で $c を $ch に変更します。

2- curl_exec 関数の後に「echo $html」を追加します。

3- @Dan がコメントで述べたように、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);
于 2011-11-17T06:50:17.507 に答える