Ошибка PHP CURL после изменения только URL - PullRequest
1 голос
/ 04 августа 2011

По какой-то причине мой CURL сейчас не работает, все, что я сделал, это изменил URL-адрес (как раньше, когда я использовал это для вызова информации из-за необходимости в серверах со скоростным миром), и он работал безупречно, теперь я пытаюсь использовать его с IMDBAPI и выдает ошибку.

URL, который я ввожу:

http://localhost/movie.php?title=The Green Mile

Код:

<?php     
    $title = $_GET['title']; 

    //optional comment out or delete    
    error_reporting(E_ALL);    

    // The POST URL and parameters    
    $request =  'http://www.imdbapi.com/?t='.$title.'&r=XML';    

    // Get the curl session object    
    $session = curl_init($request);    

    // Set the POST options.     
    curl_setopt($session, CURLOPT_HEADER, true);    
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);    

    // Do the POST and then close the session    
    $response = curl_exec($session);    
    curl_close($session);    

    // Get HTTP Status code from the response    
    $status_code = array();    
    preg_match('/\d\d\d/', $response, $status_code);    

    // Check for errors    
    switch( $status_code[0] ) {    
        case 200:    
            // Success    
            break;    
        case 503:    
            die('Service unavailable. An internal problem prevented us from returning data to you.');    
            break;    
        case 403:    
            die('Forbidden. You do not have permission to access this resource, or are over your rate limit.');    
            break;    
        case 400:    
            // You may want to fall through here and read the specific XML error    
            die('Bad request. 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 returned an unexpected HTTP status of:' . $status_code[0]);    
    }    

    // Get the XML from the response, bypassing the header    
    if (!($xml = strstr($response, '<?xml'))) {    
        $xml = null;    
    }    

    // Output the XML    

    $movieInfo = simplexml_load_string($xml);    

        $movieTitle = $movieInfo->movie['title'];    

    echo "Title: $movieTitle <br />";    

    ?> 

Ошибка:

Bad request. The parameters passed to the service did not match as expected. The exact error is returned in the XML response.

Я новичок в CURL, поэтому любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

Вы должны urlencode() $title.

0 голосов
/ 04 августа 2011

Как сказал Ши, вам необходимо закодировать значения:

$title = rawurlencode($_GET["title"]);

Вы можете получить http-код вашего запроса с помощью:

$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
0 голосов
/ 04 августа 2011

http://www.imdbapi.com/?t=The%20Green%20Mile&r=XML

Этот работает хорошо для меня.Попробуйте использовать rawurlencode для этого заголовка

$title = rawurlencode($title);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...