12

自動定期請求のアプリを作成しています。
リクエストをサーバーに送信するためにどのオプションを選択すればよいか教えてください

  • fsockeopen
  • カール

そして、なぜ一方が他方よりも優れているのですか?

4

4 に答える 4

11

組み込み関数でPHPのストリームコンテキストを使用することをお勧めします:http://us3.php.net/manual/en/book.stream.php。完全なHTTP/S機能であり、fopen/関数とうまく統合されfile_get_contentsます。(たとえば)次のようなPOSTを実行できます。

$chunk = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".FACEBOOK_APP_ID."&client_secret=".FACEBOOK_SECRET."&grant_type=client_credentials");
if ($request_ids && $chunk) {
    $cookie = explode('=', $chunk);
    if (count($cookie) == 2) $cookie = $cookie[1];
    else $cookie = $cookie[0];

    // flush it
    foreach ($request_ids as $request_id) {
        $context = stream_context_create(array(
            'http' => array(
                'method'        => 'POST',
                'content'       => 'method=DELETE',
                'user_agent'    => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)",
                'max_redirects' => 0
            )
        ));
        @file_get_contents('https://graph.facebook.com/' . $request_id . '?access_token=' . $cookie, false, $context);
    }
}

このコードはFacebookにログインし、アプリログイントークンを取得してから、安全なHTTP POSTを使用して、グラフAPIを使用して多数のオブジェクトを削除します。

もっと凝ったことをする必要があるなら、あなたもそうすることができます。

$context = stream_context_create(array('http' => array(
   // set HTTP method
   'method'         => 'GET',
   'user_agent'     => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)",
   'max_redirects'  => 0
)));

// extract the cookies
$fp      = fopen(URL, "r", false, $context);
$meta    = stream_get_meta_data($fp);
$headers = $metadata['wrapper_data'];
fclose($fp);

ログに記録されますURLによって返されたヘッダーを取得します。外部ライブラリは必要ありません。

于 2011-05-09T08:02:54.137 に答える
5

ない。 直接ではありません。

ソケットのベア メタル上で HTTP ヘッダーを書き込んで解析するのは正気ではなく、curl の API はまったく攻撃的であることがわかりました。

PEAR のHTTP_Request2を見てください。おそらくあなたのマシンにもインストールされています。そうでない場合は、コードにバンドルするだけで済みます。BSD ライセンスです。ソケットまたは curlのいずれかをラップし、比較的健全な HTTP インターフェースを提供します。

于 2011-05-09T07:13:25.093 に答える
3

http プロトコルを処理する必要がある場合は Curl を使用し、非 http サーバーへのより一般的なアクセスが必要な場合はソケットを使用します。

于 2013-05-04T17:06:41.217 に答える