2013-02-13 5 views
0

Я создаю веб-сайт, который делает стандартные HTTP-вызовы API. Мой первый вызов - прямое GET без параметров с использованием базового auth. Я использую Curl в своем php. Я запускаю это через локальную установку XAMPP. Мой вызов не работает, но если у меня есть коллега, запустите php на своем Linux-сервере, где установлена ​​более старая версия ubuntu PHP, она отлично работает. Каков наилучший способ устранения этой проблемы? Я предполагаю, что это что-то с моей установкой XAMPP, но есть ли хороший метод для устранения неполадок? Я использовал curl_getinfo на моем сеансе curl, чтобы получить возвращаемые значения, и, насколько я могу судить, это не дает много понимания.PHP Curl GET Устранение неисправностей

Вот выход curl_getinfo:

Array ( 
[url] => https://www.ebusservices.net/webservices/hrpcertws/rbs/api/merchants/267811683882/consumers.xml? 
[content_type] => 
[http_code] => 0 
[header_size] => 0 
[request_size] => 107 
[filetime] => -1 
[ssl_verify_result] => 0 
[redirect_count] => 0 
[total_time] => 0.28 
[namelookup_time] => 0.015 
[connect_time] => 0.015 
[pretransfer_time] => 0 
[size_upload] => 0 
[size_download] => 0 
[speed_download] => 0 
[speed_upload] => 0 
[download_content_length] => -1 
[upload_content_length] => -1 
[starttransfer_time] => 0 
[redirect_time] => 0 
[certinfo] => Array () 
[primary_ip] => 127.0.0.1 
[primary_port] => 8888 
[local_ip] => 127.0.0.1 
[local_port] => 59509 
[redirect_url] => 
) 

Я использую:
XAMPP 1.8.1
PHP Version 5.4.7
Curl 7.24.0
на Windows 7

Добавлено Код:

<?php 

    error_reporting(E_ALL); 

    $session = 'FALSE'; 
    // Initialize the session 
    $session = curl_init(); 

    $stderr = fopen("curl.txt", "w+"); 

    // Set curl options 
    curl_setopt($session,  CURLOPT_URL, 'https://www.ebusservices.net/webservices/hrpcertws/rbs/api/merchants/12233442/consumers.xml?'); 
    curl_setopt($session, CURLOPT_STDERR, $stderr); 
    curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($session, CURLOPT_USERPWD, "username:pwd"); 
    curl_setopt($session, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($session, CURLOPT_SSLVERSION, 3); 
    curl_setopt($session, CURLOPT_VERBOSE, 1); 

    // Make the request 
    $response = curl_exec($session); 

    print_r(curl_getinfo($session)); 

    // Close the curl session 
    curl_close($session); 

    fclose($stderr); 

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

    // Check the HTTP Status code 
    if(isset($status_code[0])) 
    { 
     switch($status_code[0]) 
    { 
      case 100: 
        break; 
      case 200: 
        break; 
      case 503: 
        die('Your call to HRP API 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 HRP API 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 HRP API 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 HRP API failed and returned an HTTP status of 401. That means: Unauthorized. The credentials supplied do not have permission to access this resource.'); 
        break; 
      case 404: 
        die('Page not found.'); 
        break; 
      default: 
        die('Your call to HRP API returned an unexpected HTTP status of:' . $status_code[0]); 
     } 
    } 
    else 
    { 
     echo 'failed'; 
    } 

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

    // Output the XML 
    echo htmlspecialchars($xml, ENT_QUOTES); 

?> 
+0

Добавьте подробный вариант и посмотрите, какой вывод является командной строки. И вы должны показать какой-то код. –

+0

Получите страницу-получателя 'php_info()' и проверьте возвращаемую информацию. –

+0

Я могу запустить GET из командной строки curl вне XAMPP, и он отлично работает. Есть ли способ запустить командную строку curl, используя тот же curl внутри xampp? Я не знал, что это возможно. – user1757986

ответ

0

Попробуйте использовать Fiddler, чтобы увидеть, что именно находится в HTTP-трафике.

+0

Я пробовал использовать Fiddler, но единственная запись, которую я получаю, - это начальный «CONNECT» на базовый url «www.ebusservices.net:443». У меня нет других записей. Его TextView заявляет, что клиентское рукопожатие найдено, и я вижу некоторые записи в шифрах, которые указывают «непризнанный шифр». Означает ли это вопрос о возможной проблеме? Я бы не подумал, так как я могу успешно обработать этот GET через командную строку cURL и SoapUI. – user1757986

+0

Мне нужно было увидеть выход Fiddler, прежде чем я смог бы рассказать, что происходит. –

Смежные вопросы