2010-05-03 5 views
14

file_get_contents()을 사용하여 서버에서 응답을 받고이 오류가 발생했습니다. 누군가 그 이유와 해결 방법을 말해 줄 수 있습니까? 코드 부분은 다음과 같습니다.HTTP 요청이 실패했습니다! HTTP/1.1 505 HTTP 버전이 지원되지 않음 오류

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

브라우저에 URL을 붙여 넣는 동안 서버가 올바르게 응답했습니다. 이 문제는 서버가 클라이언트의 HTTP 버전을 거부했기 때문에 발생했음을 알았지 만, 제 경우에는 그 이유가 무엇인지 알 수 없습니다.

어떤 도움

이 많이 감사합니다. 미리 감사드립니다.

+0

'컬'을 사용할 때도 동일한 오류가 발생합니다. – shyam

+0

'$'을 '% 24'으로 바꾸어보십시오. 아마도 문제의 원인이 아닌 것은 분명하지만 문자를 올바르게 인코딩해야합니다. – Kylar

+0

'$'는 실제로 변수에 대한 것입니다. 그리고 나는 그 오류를 일으킨 것을 발견했으며, 그것이 urlencoding입니다. 스크립트가 초기에 작동하고 있었음을 미리 알지 못했고 약간의 편집 작업 후에 기능을 놓쳤습니다. 도움을 주려고하는 모든 사람들에게 감사 드리며 실제로 귀하의 답변은 어디에서 정보를 제공합니까? – shyam

답변

29

문제가 발견되어 간단한 인코딩 오류 - 누락 된 URL 인코딩입니다.

내가 처음에 알아 차리지 못한 이유는 내가 편집을하기 전에 코드가 정상 이었기 때문이며 URL을 입력하기 전에 서버를 호출하기 전에 코드를 urlencode()에 놓쳤습니다.

대부분의 사람들에게이 오류가 발생하는 것으로 보입니다. 따라서이 문제가 발생하면 URL 매개 변수로 사용되는 값에 공백이 포함될 수있는 모든 변수에 urlencode()을 사용하십시오.

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

는, 시간과 모든 응답에 대한 감사, 사람들은 정보를 제공했다 : 같은 내 문제의 경우 고정 된 코드가 보일 것이다.

+0

을 사용해야합니다. 주어진 URL이 있고 그 뒤 부분에서 공백을 바꾸지 않았습니다. 그렇게했고 그것은 나를 위해 그것을 고쳤다. –

0

전선에서 일어나는 일을 냄새 맡을 수 있습니까? HTTP 요청의 형식이 무선으로 나가는 것을 보면 많은 도움이 될 것입니다.

내 생각에 서버가 제대로 구현되지 않았고 HTTP/1.1 요청을 거부하고있는 것 같습니다. ... 컬에 --http1.0을 설정하고 어떻게되는지보고

+0

당신은 어떻게 HTTP 요청의 형식을 볼 말해 줄 수 ..? – shyam

+0

file_get_contents로는 그렇게 할 수 없습니다. HTTP 요청이 어떻게 이루어지는지를 제어 할 수없는 매우 두려운 방법입니다. 헤더는 반환되지 않으며 단순한 'GET'이외에는 아무 것도 할 수 없습니다. 헤더를 얻거나 다른 HTTP 요청 메소드를 수행하려면 CURL –

9

1.0으로 설정 HTTP 버전과 당신이 할 수 create a stream context을 시도하고 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); 

을 : 탈출하는 것을 잊지 마세요 당신의 URI 인수 값은 urlencode으로 바르게 나타납니다.

0

동일한 문제가 발생하여 제 경우는 urlencode()에 잡히지 않는 요청 URL 끝에 잘못된 문자/CRLF 문자가 있습니다 (또는 문자를 인코딩하더라도 여전히 서버에서 오류를 생성합니다). 문제가 발견되면 스트림 컨텍스트 옵션이 없어도 요청이 다시 시작되었습니다.

다른 사람들에게 도움이되기를 바랍니다.

0

우리는 여전히 그 경우에

file_get_contents($api); 

에 오류가 일부 시간이 시도 :

fopen($api,"r"); 
0

나는 또한이 같은 문제에 직면했다 .. 나중에 내가 결과를 검색하는 동안 발견 mysql에서 Limit $ count, $ count는 -ve였다. URL이 잘 작동하는 문제 해결. URL에만 문제가 있으며 file_get_contents 또는 http 버전 문제는 아닙니다.

관련 문제