PHP ile HTTP/1.1 isteği yapmak

2 Cevap php

Benim kod file_get_contents() bir API nokta için GET isteklerini yapmak için kullanıyor. Bu HTTP/1.0 kullanıyor ve benim sysadmin ben kullanmanız gerektiğini söylüyor gibi görünüyor HTTP/1.1. Nasıl bir HTTP/1.1 isteği yapabilir? Ben curl kullanmak gerekir veya daha iyi / daha kolay bir yolu var mı?

Update

Ben PHP 5.1.6 kullanıyorum çünkü cURL kullanmaya karar verdi. Bunu yaparak HTTP/1.1 zorlayarak sona erdi:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);

Daha sonra 5.3 kullanıyorsanız ya da eğer böyle bir şey yapıyor denedim:

$ctx = stream_context_create(array(
    'http' => array('timeout' => 5, 'protocol_version' => 1.1)
    ));
$res = file_get_contents($url, 0, $ctx);
echo $res;

http://us.php.net/manual/en/context.http.php

Note: PHP prior to 5.3.0 does not implement chunked transfer decoding. If this value is set to 1.1 it is your responsibility to be 1.1 compliant.

Ben HTTP/1.1 sağlayabilir hangi bulunan başka bir seçenek kullanmak için HTTP extension

2 Cevap

Ben her iki durumda da cURL kullanmak istiyorum, size daha fazla kontrol sağlar ve özellikle size zaman aşımı seçeneği sunar. Uzak bir API aşağı olduğunda uygulama donmasına izin vermemek için harici API ararken çok önemlidir.

Bu gibi olabilir:

# Connect to the Web API using cURL.
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.url.com/api.php?123=456'); 
curl_setopt($ch, CURLOPT_TIMEOUT, '3'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$xmlstr = curl_exec($ch); 
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

curl_close($ch);

$ başlıklar bir dizi nerede, curl_setopt($s,CURLOPT_HTTPHEADER,$headers); kullanılarak başka bir şey belirtmedikçe cURL, varsayılan başına HTTP/1.1 kullanacaktır.

Sunucu tutma bağlantılarını kullanmak kullanmak üzere yapılandırılırsa, sadece çok stream_context_create / file_get_contents kullanmak isteyen başkaları biliyorum, tepki dönmeyecektir, eklemek 'protocol_version' => 1.1 gibi {[(1) gerekiyor }]. Aşağıda
Örnek:

$ctx = stream_context_create(array( 'http' => array( 'timeout' => 5, 'protocol_version' => 1.1, 'header' => 'Connection: close' ) )); $res = file_get_contents($url, 0, $ctx);