Yahoo API Call возвращает ошибку 505
var value = 'New Delhi, India';
$yql_query_url = 'http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text='.value.'&format=json';
$ch = curl_init($yql_query_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true); //Returns the headers
$json = curl_exec($ch); //RESULT of YQL QUERY
$status_code = array();
preg_match('/\d\d\d/', $json, $status_code);
switch( $status_code[0] ) {
case 200:
echo "HTTP status of 200: Success!";
// Success
break;
case 503:
die('Your call to Yahoo Web Services failed and returned an HTTP status of 503. That means: Service unavailable. An internal problem
prevented us from returning data to you.');
break;
case 403:
die('Your call to Yahoo Web Services failed and returned an HTTP status of 403. That means: Forbidden. You do not have permission to access this resource, or are over your rate limit.');
break;
case 400:
die('Your call to Yahoo Web Services failed and returned an HTTP status of 400. That means: Bad request. The parameters passed to the service did not match as expected. The exact error is returned in the XML response.');
break;
case 401:
die('Your call to Yahoo Web Services failed and returned an HTTP status of 401. That means: Authorization Required. The parameters passed to the service did not match as expected. The exact error is returned in the XML response.');
break;
case 999:
die('Your call to Yahoo Web Services failed and returned an HTTP status of 999. That means: Unable to process this request at this time. The parameters passed to the service did not match as expected. The exact error is returned in the XML response.');
break;
default:
die('Your call to Yahoo Web Services returned an unexpected HTTP status of:' . $status_code[0]);
}
preg_match('/{.*}/',$response, $json);
$result=json_decode($json,true);
Я получаю ошибку Your call to Yahoo Web Services returned an unexpected HTTP status of:505
Любая помощь будет оценена:)
1 ответ
Решение
Из вики:
505 Версия HTTP не поддерживается Сервер не поддерживает версию протокола HTTP, используемую в запросе.
Вы можете принудительно установить версию HTTP при использовании curl:
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_NONE);//CURL will choose
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);//Use 1.0
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);//Use 1.1
Выбор одного из 1.0 или 1.1 должен решить вашу проблему.
Редактировать:
Также только что заметил вашу строку запроса:
http://query.yahooapis.com/v1/public/yql?q=select * из geo.places где text='.value.'&format=json
Это недействительно. Вам захочется url_encode
запрос. Вы также используете синтаксис JavaScript вместо PHP:
$value = 'New Delhi, India';
$query = "select * from geo.places where text='$value'";
$yql_query_url = 'http://query.yahooapis.com/v1/public/yql?q='.urlencode($query). '&format=json';