За последние 24 часа нас посетили 37876 программистов и 1734 робота. Сейчас ищут 883 программиста ...

Запрос json методом POST

Тема в разделе "PHP для новичков", создана пользователем Pi Patel, 20 сен 2018.

  1. Pi Patel

    Pi Patel Новичок

    С нами с:
    11 фев 2018
    Сообщения:
    13
    Симпатии:
    0
    Добрый день.
    Помогите пожалуйста отправить через php запрос json методом POST такого вида:
    Код (Text):
    1. content-type: application/json; charset=UTF-8
    2.  
    3. https://api-test./test/
    4.  
    5. {
    6. "jsonrpc": "2.0",
    7. "method": "САП.Аутентифицировать",
    8. "protocol": 3,
    9. "params": {
    10. "login": "login",
    11. "password": "password"
    12. },
    13. "id": 1
    14. }
    Пробовал таким способом:
    PHP:
    1. $user ='
    2. {
    3. "jsonrpc": "2.0",
    4. "method": "САП.Аутентифицировать",
    5. "protocol": 3,
    6. "params": {
    7. "login": "login",
    8. "password": "password"
    9. },
    10. "id": 1
    11. }';
    12.  
    13. $json[] = $user;
    14. $json = json_encode($json);
    15. $ch = curl_init('https://api-test./test/');
    16. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    17. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','charset=UTF-8'));
    18. curl_setopt($ch, CURLOPT_POSTFIELDS, "data=".$json);
    19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    20. $response = curl_exec($ch);
    21. //curl_close($response);
    22. echo "<pre>";var_dump($response);echo "</pre>";die();
    23. curl_close($response);
    Получаю ошибку:
    Код (Text):
    1. string(513) "{"jsonrpc":"2.0","error":{"code":-32700,"message":"","details":"Ошибка распознавания (смещение 0): Invalid value.","type":"error","data":{"classid":"{f4101a18-9ea7-447d-9f98-9a951643f9f0}","error_code":-1,"addinfo":null}},"id":null}  
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    продиктуй логику с 1 по 14 включительно, с возможными ошибками. Да и понять что функция делает, какой вид данных кодирует.
     
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @Pi Patel, начните формирования массива $user с требуемыми индексами и значениями, а не строки для дальнейшего заворачивания в JSON (json_encode)
     
  4. Pi Patel

    Pi Patel Новичок

    С нами с:
    11 фев 2018
    Сообщения:
    13
    Симпатии:
    0
    @MouseZver, ответ на запрос должен быть:
    Код (Text):
    1. {
    2. "jsonrpc": "2.0",
    3. "result": "000b8ee4-000b8ee5-00ba-a40615cd1a61453a",
    4. "id": 0
    5. }
    @Sail, Так и знал что придётся таким способом делать. Буду пробовать.
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    Я не увидел ответ на мой вопрос.
     
  6. Pi Patel

    Pi Patel Новичок

    С нами с:
    11 фев 2018
    Сообщения:
    13
    Симпатии:
    0
    @MouseZver, а что там это простой запрос который выполняет аутентификацию по логину/паролю, возвращает идентификатор сессии.
    Мне требуется этот запрос отправить через php.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.813
    Симпатии:
    1.332
    Адрес:
    Лень
    продиктуй логику с 1 по 14 включительно, с возможными ошибками. Да и понять что функция делает, какой вид данных кодирует.
     
  8. Pi Patel

    Pi Patel Новичок

    С нами с:
    11 фев 2018
    Сообщения:
    13
    Симпатии:
    0
    Получилось так пока сделать, работает:
    PHP:
    1. $body = '{
    2. "jsonrpc": "2.0",
    3. "method": "САП.Аутентифицировать",
    4. "protocol": 3,
    5. "params": {
    6. "login": "login",
    7. "password": "password"
    8. },
    9. "id": 1
    10. }';
    11.  
    12. $ch = curl_init();
    13. curl_setopt($ch, CURLOPT_URL, "https://api-test./test/");
    14. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    15. curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json, charset=UTF-8"));
    16. curl_setopt($ch, CURLOPT_POST, 1);
    17. curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    18. $result = curl_exec($ch);
    19. echo "<pre>";var_dump($result);echo "</pre>";die();
    Не знаю правда насколько я продвинусь дальше с новыми запросами, но вроде работает.
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Пальцем в небо попал. Понять процесс желание отсутствует...
     
  10. mirosas

    mirosas Активный пользователь

    С нами с:
    17 июл 2015
    Сообщения:
    236
    Симпатии:
    5
    Автор, а зачем тебе все это? Мне просто интересно))

    Интересно, а что ты вот тут хотел сделать???
    PHP:
    1. $user ='
    2. {
    3. "jsonrpc": "2.0",
    4. "method": "САП.Аутентифицировать",
    5. "protocol": 3,
    6. "params": {
    7. "login": "login",
    8. "password": "password"
    9. },
    10. "id": 1
    11. }';
    12.  
    13. $json[] = $user;
    14. $json = json_encode($json);
    - понятно что этот код не работал как нужно, но интересно, зачем ты делал 13 и 14 строки??
    --- Добавлено ---
    Значит на принимающей стороне стоит не тупой json_decode, а что-то другое.
     
    #10 mirosas, 21 сен 2018
    Последнее редактирование: 21 сен 2018