Данные PHP Symfony curl post не найдены

Я пытаюсь отправить данные Post из проекта Symfony в другой проект Symfony (используемый как API). Но данные, похоже, не соответствуют запросу ..

Проблема, похоже, возникает из-за того, что данные публикации cURL должны быть повторно опубликованы после изменения URL-адреса. Потому что, если я удалю «curl_setopt ($ curl, CURLOPT_FOLLOWLOCATION, 1);», ответ будет HTML-страницей, пытающейся обновить ту же самую запрошенную страницу.

Я использую, чтобы получить «аргументы не найдены» согласно следующему коду ..

Вызов контроллера (проект A)

public function onlineHandlerAction(Request $req, $name, $surname)
{

    $url = $this->getParameter("api"). "avis/find";

    $args = array(
        "name" => "qsdqsdqsd",
        "surname" => $surname,
        "birthdate" => $defunt->getBirthDate()->getTimestamp()
    );

    $apiRes = $kgns->CallAPI('POST', $url, $args);

    var_dump($apiRes);

    return $this->render('**:online-handler.html.twig', array(
        'res' => $apiRes
    ));                                             

}

вызовите функцию api, которую я нашел в Интернете, и отредактируйте по своему усмотрению. (инструмент Проекта А)

public function CallAPI($method, $url, $data = false)
{

    $curl = curl_init();

  switch ($method)
  {
      case "POST":
          curl_setopt($curl, CURLOPT_POST, 1);

          if ($data)
              curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
          break;
      case "PUT":
          curl_setopt($curl, CURLOPT_PUT, 1);
          break;
      default:
          if ($data)
              $url = sprintf("%s?%s", $url, http_build_query($data));
  }

  curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);    
  curl_setopt($curl, CURLOPT_POSTREDIR, 1);

  $result = curl_exec($curl);

  curl_close($curl);

  return $result;

}

функция api (проект B)

public function avisFindAction(Request $req)
{


  $em = $this->getDoctrine()->getManager();

  $args = $req->request->all();

  $argsFound = false;


  if (null !== $args && count($args) > 0):

    $argsFound = true;

    foreach ($args as $key => $value) {
      if ($key=='birthdate') $args[$key] = new \DateTime($value);
      else $args[$key] = $value;
    }

    $avis = $em->getRepository('MainBundle:Avis')
                  ->findOneBy($args);

    if ($avis):

      $encoders = array(new JsonEncoder());               
      $normalizers = array(new ObjectNormalizer());
      $serializer = new Serializer($normalizers, $encoders);
      $avisJSON = $serializer->serialize($avis, 'json');

      $response = new Response($avisJSON);
      $response->headers->set('Content-Type', 'application/json');
      return $response;

    else:

      $response = ["error"=>"avis not found"];

    endif;

  else:

    $response = ["error"=>"args not found"];

  endif;

  return new JsonResponse(['test'=>'test', 'argsFound'=>$argsFound]);

}

Выполняется ли аутентификация вызываемого API? Перенаправление может быть перенаправлено на страницу входа

Mcsky 25.04.2018 15:51

@Mcsky благодарю за ответ, но нет. Он перенаправляет на ту же страницу. Я пробовал использовать другой маршрут, но без перенаправления. Я не знаю, почему у этого маршрута есть перенаправление ..

Nastyo 26.04.2018 11:39

Лучшая информация, которую вы можете получить, находится в журналах сервера B (для этого вам нужно изменить конфигурацию монолога на уровень отладки на этом сервере). Если у вас есть проект B в среде разработки, попробуйте его на локальном компьютере перед env prod / preprod. Вы должны увидеть свой звонок из проекта A в B в журнале и причину перенаправления. Для меня две возможные причины: конфигурация безопасности или слушатель, возвращающий RedirectResponse. Дайте мне знать, когда у вас будет эта информация :)

Mcsky 26.04.2018 21:56

@Mcsky Я исправляю эту проблему, переписывая свой маршрут в проекте B. (но пишите его по-настоящему), но ошибки больше не было. Не понял, но как он работает ... Спасибо за помощь!

Nastyo 29.04.2018 19:17

Это круто :) Просто убедитесь, что ваш маршрут не открыт без аутентификации в сети по очевидным причинам безопасности.

Mcsky 30.04.2018 15:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
418
0

Другие вопросы по теме