Какой подход лучше между fsockopen и curl?

Я создаю приложение для автоматического повторного выставления счетов.
Пожалуйста, дайте мне знать, какой вариант я должен выбрать для отправки запроса на сервер

  • fsockeopen
  • curl

а почему одно лучше другого?

5 ответов


Я бы порекомендовал вам завить, из-за настраиваемых параметров. например, ssl


Я бы рекомендовал использовать контексты потока PHP со встроенными функциями:http://us3.php.net/manual/en/book.stream.php . Полная функциональность HTTP / S и прекрасно интегрируется с fopen/file_get_contents функции. Вы можете (например) сделать такой пост:

$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-пост для удаления ряда объектов с помощью API graph.

Если вам нужно сделать более причудливые вещи, то вы тоже может.

$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);

will log принесет вам заголовки, возвращаемые URL-адресом. Внешние библиотеки не требуются.


ни. Нет, я имею в виду.

запись и разбор HTTP-заголовков над голым металлом сокета-это безумие, и я нахожу API curl, чтобы быть прямо наступление.

взгляните на грушу HTTP_Request2, он, вероятно, даже установлен на вашем компьютере. И если нет, вы можете просто связать его с вашим кодом-это лицензия BSD. Он обертывает или сокеты или cURL, и обеспечивает относительно нормальный интерфейс HTTP.


используйте Curl, когда вам нужно обрабатывать протокол http, и сокет, когда вам нужен более общий доступ к не http-серверу.


Я смотрю в это прямо сейчас и наткнулся на следующую страницу, которая дает код для тестирования различных опций и получения выходных данных скорости. Весьма интересный.

http://www.hashbangcode.com/blog/quickest-way-download-web-page-php