Ошибка 500 внутренняя ошибка сервера при отправке HTTP-запроса post с помощью Guzzle

Я пытаюсь отправить почтовый http-запрос с помощью Guzzle, но получаю ошибку 500

Internal server error 
ServerException in RequestException.php line 113:
Server error: `POST https://domainname/api/v1/user/register` resulted in a `500 Internal Server Error` response:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="robots" content="noindex,nofo (truncated...)

Я попытался отправить те же ключи заголовка и тела с помощью Postman, он работал без проблем:

{
    "status": "true"
}

Заголовок:  введите здесь описание изображения Текст:  введите описание изображения здесь

Это мой запрос клиента Guzzle: -

        $client = new GuzzleHttp\Client(['base_uri' => 'https://domainname/api/v1/']);
                   $response = $client->request('POST', 'user/register', [
                       'headers' => [
                           'Authorization' => Session::get('token'),
                           'Content-Type'     => 'application/x-www-form-urlencoded',
                       ],
                       'form_params' => [
                           'start_date' => $start_date,
                           'expiry_date' => $expiry_date,
                           'type' => 'normal',
                           'status' => 'active',

                       ]
                   ]);

                    $response= $response->getBody();
                    $re= json_decode($response);

Мой путь к этому api: -

Route::post('/user/register', 'UsersAPI@register'); 

Контроллер My Register:

public function register(Request $request){
Log::info('Request: ' . $request);
//dd($request->all());
     $validator = Validator::make($request->all(), [
        // 'user_id' => 'required',
        'start_date' => 'required',
        'expiry_date' => 'required',
        'type' => 'required',
        'status'=>'required',   
        //'receipt' => 'required',
        //'purchase_id'=>'required',
    ]);

    $user = JWTAuth::toUser(); 
      //Check whether validation is failed or passed
    if($validator->fails()){
        //Redirect back with validation errors
        return response()->json(['error' => $validator->errors()], 400);
    }



         $user = new User($data);
        $user->user()->save($user);
     Log::info('save_user done for this user: ' . $user->id);


    return ['status' => 'true']; 
}

NGINX error.log: -

[02/Dec/2017:15:49:13 +0300] "POST /api/v1/user/register HTTP/1.1" 500 16904 "-" "GuzzleHttp/6.2.1 curl/7.55.0 PHP/7.1.9"

person Q8root    schedule 02.12.2017    source источник
comment
В вашем почтальоне я вижу, что вам не хватает места для заголовка авторизации между носителем и самим токеном. Таким образом, взгляните на значение Session :: get ('token'). BTW Error 500 может означать что угодно. Вам нужно углубиться и выяснить настоящую проблему. Этот вывод журнала не так полезен.   -  person Dusan    schedule 02.12.2017
comment
@Dusan Да, вы правы, я просто попытался заменить переменные в запросе на «строку», это сработало, не вернув ошибку.   -  person Q8root    schedule 02.12.2017


Ответы (1)


Если один и тот же код дает разные результаты в зависимости от того, как вы отправляете свой запрос, я предполагаю, что между полезными нагрузками запроса все еще есть различия.

Вы дважды проверили содержимое Session :: get ('token'), $ start_date и $ expiry_date?

person Markus Wolff    schedule 02.12.2017
comment
Да, вы правы, я просто попытался заменить переменные в запросе на «строку», это сработало, не вернув ошибку. проблема в $ date, а не в сеансе ('токен'), я попытаюсь понять, в чем проблема - person Q8root; 02.12.2017
comment
У меня есть следующие переменные для $ date ..... $ start_date = Carbon :: now (); $ expiry_date = Углерод :: сейчас () - ›addDays (30); почему они выдают ошибку 500? - person Q8root; 02.12.2017
comment
echo $ start_date == ›02.12.2017 14:16:16; echo $ expiry_date == ›2018-01-01 14:16:16 - person Q8root; 02.12.2017
comment
Обычно ответ 500 имеет основную причину, которую можно каким-либо образом зарегистрировать. Что в журнале сервера указано, где находится код контроллера? Поскольку у вас нет кода в контроллере, который явно выводит код состояния 500, я предполагаю, что возникает какое-то исключение. Если вы еще не видите убедительное сообщение об ошибке в своем журнале, попробуйте заключить свой код в блок try ... catch, перехватить все экземпляры \ Exception и вывести / записать сообщение об исключении. Это должно дать вам подсказку. - person Markus Wolff; 02.12.2017
comment
это странная проблема, когда я просто заменяю 'start_date' = ›$ start_date, 'expiry_date' =› $ expiry_date на 'start_date' = ›'2017-12-1 14:06:58', 'expiry_date' =› '2017-12-20 14:06:58'. Запрос работает без каких-либо проблем, даже если я использую формат даты и времени, полученный из обеих переменных, что касается журнала ошибки 500, я опубликовал то, что получил на сервере Nginx, пожалуйста см. мой основной вопрос - person Q8root; 02.12.2017
comment
Что ж, тогда я бы предположил, что проблема заключается в вызове Carbon :: now (). Вы пробовали обернуть его блоком try..catch и записать сообщение об исключении, если оно есть? - person Markus Wolff; 03.12.2017