2013-06-29 3 views
0

У меня есть веб-приложение и api, и моя система входа в систему работает с api, поэтому он возвращает: статус заголовка 200, если он успешно (имя пользователя и пароль правильно), в противном случае он возвращает HTTP/1.0 401 Unauthorized и json message например: {успех: 0, "неправильное имя пользователя/пароль"} (проверено почтальонов плагин в Google Chrome)php file_get_content returing 401 on failed

для бывших, если я хочу, чтобы сделать запрос:

$method = "login"; 
$data = array("user"=>"test", "pass"=>"test"); 
send_re($method, $data); 

это моя функция send_re

function send_re($method, $data){ 
$url = "api.location/".$api_method; 
    $options = array(
     'http' => array(
     'method' => 'POST', 
     'content' => http_build_query($data), 
     'header'=> "Content-Type: application/x-www-form-urlencoded\r\n" 

     ) 
    ); 

    $context = stream_context_create($options); 
    $result = file_get_contents($url, false, $context); 

    return stripslashes(json_encode($result)); 
} 

если мои $ данные правильно e.x имя пользователя и пароль, но если они не я не получаю сообщение об ошибке, но это:

A PHP Error was encountered 

Severity: Warning 

Message: file_get_contents(http://85.10.229.108/home/login): failed to open stream: HTTP request  
HTTP/1.0 401 Unauthorized 

Filename: libraries/api.php 

Есть ли способ избежать этой проблемы и получить сообщение от API?

+1

вы пытались положить '@' 'перед тем file_get_contents' подавить предупреждения? – luk2302

+0

Да, он не показывает ошибку с '@', но не возвращает ответ json ex: '{success: 0," неправильное имя пользователя/пароль "}' –

+0

Это довольно ожидаемое поведение, поскольку HTTP 401 указывает ошибка и ничего не возвращает, кроме самой ошибки, я думаю. Я предполагаю, что вы создаете ошибку через header() в вызываемом скрипте? – luk2302

ответ

0
function send_re($method, $data){ 
$url = "api.location/".$api_method; 
    $options = array(
     'http' => array(
     'method' => 'POST', 
     'content' => http_build_query($data), 
     'header'=> "Content-Type: application/x-www-form-urlencoded\r\n", 
     'ignore_errors' => true 

     ) 
    ); 

    $context = stream_context_create($options); 
    $result = file_get_contents($url, false, $context); 

    return stripslashes(json_encode($result)); 
} 

Просто добавьте 'ignore_errors' => true, и это делает трюк.

ссылка: http://php.net/manual/en/context.http.php