Ben web hizmeti talepleri için file_get_contents veya curl kullanmalı mıyım?

3 Cevap php

Ben bir posta kodu arama hizmeti var ve ben olası aşımları veya aşağı olan sunucuya endişeleniyorum.

Ben ilk istek 20-25s sonra herhangi bir HTTP Response almazsam ben başarısız simgeleyen bir JSON yanıt isterim:

({ success:0 })

3 Cevap

Sen file_get_contents() de kullanarak stream_context_create() için zaman aşımını (ve diğer seçenekleri bir sürü) ayarlayabilirsiniz. Seçenekler listesi için here bakın.

Kılavuzun değiştirilmiş örnek:

<?php
$opts = array(
  'http'=>array(
    'timeout' => 25,
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

/* Sends an http request to www.example.com
   with additional headers shown above */
$contents = file_get_contents("http://example.com", false, $context);
?>

Bu sizin için çalışıyorsa, ben bu aşkın cURL kullanarak karşı konuşan bir şey görmüyorum.

Sizin başlığı ve soru metin iki farklı sorgularlar. Hem cURL ve file_get_contents belirli bir getiri ile bir zaman aşımı kullanabilirsiniz.

Eğer cURL kullanıyorsanız, curl_setopt($ch, CURLOPT_TIMEOUT, 25) //for 25s kullanarak zaman aşımı süresini ayarlayabilirsiniz.

Eğer context bunu eklemek zorunda file_get_contents için zaman aşımını ayarlamak için.

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'timeout'=>"25",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);

? Izle, cURL aksine, (opsiyon default_socket_timeout bulunan) bir varsayılan zaman aşımı olduğunu ancak unutmayın.

CURL ve file_get_contents Hem böylece bir başarısızlık yakalamak kolaydır, FALSE, başarısız bir transfer dönün.

cURL çok daha fazla özelliklere sahip ve muhtemelen sizin durumunuzda daha yararlı olacak.

You can use this
curl_setopt($ch, CURLOPT_TIMEOUT, 40); //enter the number of seconds you want to wait