Возвращение http 404 с CURL в PHP - PullRequest
0 голосов
/ 01 июня 2018

У меня есть функция, которая возвращает строку json_encoded.Все прекрасно работает, однако, если функция возвращает ошибку, я бы хотел перебросить ее через ответ об ошибке http 404 на страницу.Возможно ли это?

header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Allow-Headers: Content-Type, Access-Control- 
 Allow-Headers, Authorization, X-Requested-With");
   include_once '../../config/database.php';
include_once '../../objects/functions.php';
include_once '../../objects/user.php';

try
{
    $user = new user($db, $fn);
    $response = file_get_contents("php://input");
    $var = json_decode($response);
    echo json_encode($user->userLogin($var->App, $var->Email, 
    $var->Pass));
 }
 catch(Exception $e)
 {
    //need to somehow throw a http 404 error here and cant use header ( "HTTP/1.0 401 Unauthorized" );  as the page is already loaded
 }

Затем с другой страницы я использую curl для вывода строки json на страницу

$url = "mydomain.com";
$content = '{"App": "67759d99-772b-4d53-af65-3ef714285594", "Email": "me@example.com", "Pass":"example"}';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,array("Content-type: 
application/json; charset=utf-8;"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$response = json_decode($json_response, true);
echo $json_response;

Проблема, с которой я столкнулся, заключается в том, что страница имеетУже загружен и запущен сценарий, он уже вернул код http 200, если в случае сбоя сценария входа в систему или при обнаружении исключения необходимо вернуть код http 404 не найден.

1 Ответ

0 голосов
/ 02 июня 2018

просто отложить передачу ответа после того, как вы уже уверены, что у вас есть ошибка.Output Control Functions, в частности ob_start () / ob_get_clean () / ob_end_flush (), часто помогают в этом, например,

ob_start();
include_once '../../config/database.php';
include_once '../../objects/functions.php';
include_once '../../objects/user.php';

try
{
    $user = new user($db, $fn);
    $response = file_get_contents("php://input");
    $var = json_decode($response);
    echo json_encode($user->userLogin($var->App, $var->Email, 
    $var->Pass));
 }
 catch(Exception $e)
 {
    http_response_code(404);
 }
ob_end_flush();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...