HTTP isteği başarısız oldu!

5 Cevap php

Ben bir sunucudan yanıt almak için file_get_contents() kullanmaya çalışıyorum ve bu hata ile karşılaşıldı. Birisi nasıl bunu düzeltmek için neden ve ne olduğunu bana söyleyebilir misiniz? Kod kısmıdır:

$api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=$message";
$resp = file_get_contents($api);

The server responded correctly while I pasted the url in the browser. I learned that this is caused by the server rejecting the client's HTTP version, but I have no idea why that is happening in my case.

Herhangi bir yardım çok takdir. Şimdiden teşekkürler

5 Cevap

I found the problem, and it was in the coding. My bad.
The reason I didn't notice it at first was because the code was ok before. I did some editing, and I'd missed out the urlencode() function before calling the server, which caused a space in the url.

Ve bu hata çoğu insan için oluşur nedeni gibi görünüyor. Bu karşılaşırsanız Yani, URL parametreleri olarak kullanılan değer bulunuyor beyaz boşluk içeren tüm değişkenler urlencode() kullanın. Yani benim soru durumda sabit kodu gibi görünecektir:

$api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=" . urlencode($message);
$resp = file_get_contents($api);

Ayrıca, zaman ve yanıtların hepsi için teşekkürler, bu bilgi vardı.

Sen create a stream context HTTP sürümü ile 1.0 ayarı ve bu bağlamda kullanabilirsiniz file_get_contents:

$options = array(
    'http' => array(
        'protocol_version' => '1.0',
        'method' => 'GET'
    )
);
$context = stream_context_create($options);
$api = "http://smpp5.routesms.com:8080/bulksms/sendsms?username=$username&password=$password&source=$source&destination=$destin&dlr=$dlr&type=$type&message=$message";
$resp = file_get_contents($api, false, $context);

Arada: urlencode ile düzgün bir URI argüman değerleri kaçmak için unutma.

Eğer tel üzerinde neler dinleyebilir? O tel üzerinde gider gibi HTTP isteği biçimini görünce çok yardımcı olacaktır.

O görmeden, benim en iyi tahminim sunucu iyi-uygulanmadı olurdu ve bir HTTP/1.1 isteği reddediyor. --http1.0 Curl ayarı ve ne görmeye çalışın ...

Ben aynı sorunu koştum ve benim durumumda suçlu tarafından yakalanmak değil istek URL, sonunda bir hatalı satır / CRLF karakter oldu urlencode() (ya da belki onu kodlamak yok ama yine de ) sunucu hatayı üretmesine neden olur. Ben sorunu buldum kez istekleri bile akımı bağlamı seçenekleri olmadan, yeniden çalışmaya başladı.

Umarım bu başkalarına yardımcı olacaktır.

Bazı zaman, biz hala ile hata alıyorum

file_get_contents($api);

Bu durumda, bu deneyin:

fopen($api,"r");