2017-09-20 3 views
0

저는 Yii 1.1과 뷰가있는 위젯을 가지고 있습니다. 여기에서 외부 주소 (https의 https)에 대해 file_get_contents PHP 함수를 호출합니다. 나는 https://api.ipinfodb.com/v3/ip-city/...이라고 부릅니다. 그들은 IP 주소로 좌표를 제공합니다. 503 오류로 실패합니다.file_get_contents가 Yii 위젯의 뷰에서 작동하지 않습니다.

failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable

정적보기 페이지에서는 완벽하게 작동합니다. 내 개발자 컴퓨터에서도 작동합니다. 서버에 php.ini 파일에 allow_url_fopen = On이 있습니다.

무엇이 잘못 될 수 있습니까?

+0

정보가 충분하지 않음을. 필자의 직감은 사용자 에이전트 문자열을 설정해야한다는 것입니다.이 문자열은 기본적으로'file_get_contents'에 대해 비어 있습니다. 그런 이유로 많은 API 요청을 거부했습니다. 그러나 503은 보낼 잘못된 응답 코드이므로 API 공급자는 해당 시나리오에 적합하지 않은 것처럼 보입니다. 그러나 이것은 잘못된 API 키 오류에 대해 200을 무효로 보내는 것을 고려할 가능성이 있습니다 - 이는 401 –

+0

이어야합니다. OK, 그냥 'stream_context_create'로 헤더 옵션에 사용자 에이전트 문자열을 설정했지만 아무 것도 변경되지 않았습니다. 앞에서 말했듯이 정적 PHP 페이지에서 API를 호출하면 모든 것이 잘 작동합니다. 머리글은 위젯의 견해와 동일합니다. 어떤 종류의 정보가 필요한가요? 또한, 당신은 여기에 자신의 API 키를 만들 수 있습니다 : http://ipinfodb.com/register.php –

답변

1

해결 될까요? (URL에서 특수 문자를 사용하고 있는지 확실하지 않습니다 ...)?

file_get_contents(urlencode('https://api.ipinfodb.com/v3/ip-city/...')); 

또는, 컬 사용하도록 설정 한 경우, 당신은 다음과 같이 사용할 수 있습니다 그것을 해결하기 위해 여기

function getData($url){ 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 3);  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    $data = curl_exec($ch); 
    curl_close($ch); 

    return $data; 
    } 
+0

'urlencode'에 필요가 없습니다. 컬이 매우 느립니다. –

+0

cURL을 한 번 더 확인했는데 요청에 대한 시간 제한을 설정하면 문제가 없습니다. 감사합니다. 어쨌든이 질문에 대한 정답 일 수는 없습니다. –

+0

안녕, 환영합니다. 여전히 다른 솔루션에 대해 생각하고 있지만 (모든 공평성에서) 문제를 해결할 수있었습니다.) – Aurora