-1
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

任何帮助,将不胜感激 :)

4

1 回答 1

2

来自维基:

505 HTTP Version Not Supported 服务器不支持请求中使用的 HTTP 协议版本。

使用 curl 时可以强制使用 HTTP 版本:

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 * from geo.places where 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';
于 2014-03-07T12:31:00.103 回答