RIP 1.3.1 - отправка POST

Phenom

Джентльмен этиловый
Сообщения
193
Реакции
101
Доброго времени суток.
Пытаюсь отправить post. При отправке post запроса получаю пустой ответ.

Какие были проделаны манипуляции:
  • Отправление POST + json - ответ пустой;
    post + json:
    g_hHTTPClient = new HTTPRequest(URL);
    g_hHTTPClient.SetHeader("User-Agent", szUserAgent);
    g_hHTTPClient.SetHeader("Content-Type", "application/json");
    
    JSONObject hJSObj = new JSONObject();
    hJSObj.SetString    ("serverip",     szServerIP);
    hJSObj.SetString    ("port",         szServerPort);
    hJSObj.SetString    ("rcon",         szServerRcon);
    hJSObj.SetString    ("hostname",     szHostName);
    hJSObj.SetString    ("api_key",     API_KEY);
    
    g_hHTTPClient.Post(hJSObj, OnRequestValidateServer);
        
    delete hJSObj;
    ответ post + json:
    // Ответ, где первый debug - api_key, второй debug - проверка, есть ли api_key в БД.debug =>debug => false
    debug => ;
    debug => false;
  • Отправление PostForm - ответ пустой;
    postform:
    g_hHTTPClient = new HTTPRequest(URL);
    g_hHTTPClient.SetHeader("User-Agent", szUserAgent);
    g_hHTTPClient.SetHeader("Content-Type", "application/x-www-form-urlencoded");
    
    g_hHTTPClient.AppendFormParam    ("serverip", "%s",    szServerIP);
    g_hHTTPClient.AppendFormParam    ("port", "%s",        szServerPort);
    g_hHTTPClient.AppendFormParam    ("rcon", "%s",        szServerRcon);
    g_hHTTPClient.AppendFormParam    ("hostname", "%s",    szHostName);
    g_hHTTPClient.AppendFormParam    ("api_key",         API_KEY);
    
    g_hHTTPClient.PostForm(OnRequestValidateServer);

    ответ postform:
    // Ответ, где первый debug - api_key, второй debug - проверка, есть ли api_key в БД.debug =>debug => false
    debug => [];
    debug => false;
  • Каким образом я получаю POST;
    PHP:
    <?php
    // Не стану расписывать что и как и где записываю, думаю этого достаточно чтобы понять как я получаю post запрос.
    $postData = json_encode($_POST);
    $jsonData = file_get_contents('php://input');
    
    echo $postData;
    echo $jsonData;

Примечание: Данный код и веб работают прекрасно в связке rip 1.0.6, данные приходят и всё работает.
Вопрос: Что я делаю не так? Почему я не могу получить ответ?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #4
@Phenom, в 1.3.х где-то Эрик переписал в принципе отправку данных POST/PUT запросами. Теперь оно чанкается, и если веб-сервер не поддерживает, то происходит полная херня.

Я пытался это пофиксить, и у меня на Винде по крайней мере заработало, плюс на Линуксе ушли некие проблемы, связанные как раз с этим.
Попробуйте взять сборку отсюда: Add request body size to cURL options (#68) · ErikMinekus/sm-ripext@c292a0f
 

Phenom

Джентльмен этиловый
Сообщения
193
Реакции
101
@Phenom, в 1.3.х где-то Эрик переписал в принципе отправку данных POST/PUT запросами. Теперь оно чанкается, и если веб-сервер не поддерживает, то происходит полная херня.

Я пытался это пофиксить, и у меня на Винде по крайней мере заработало, плюс на Линуксе ушли некие проблемы, связанные как раз с этим.
Попробуйте взять сборку отсюда: Add request body size to cURL options (#68) · ErikMinekus/sm-ripext@c292a0f
В общем взял эту сборку, собрал плагин, ситуация теперь следующая - данные также не отправляются, но и теперь получить их не могу, так как получаю 301 ошибку. Пробовал на разных машинах с разным веб - ошибка 301.

Буду думать тогда что делать дальше.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #6
@Phenom, 301 - это редирект.
В случае редиректов, поведение HTTP-клиентов при выполнении PUT/POST запросов явно никем не определено. Но в большинстве случаев, делается самый обыкновенный GET-запрос без данных, и курл, используемый в основе рипа - не исключение. В рипе вроде по умолчанию "следование по редиректам" отключено.
Может Вы указали HTTP-ссылку, а редирект идет на HTTPS?
 

Phenom

Джентльмен этиловый
Сообщения
193
Реакции
101
@Phenom, 301 - это редирект.
В случае редиректов, поведение HTTP-клиентов при выполнении PUT/POST запросов явно никем не определено. Но в большинстве случаев, делается самый обыкновенный GET-запрос без данных, и курл, используемый в основе рипа - не исключение. В рипе вроде по умолчанию "следование по редиректам" отключено.
Может Вы указали HTTP-ссылку, а редирект идет на HTTPS?
Редиректа нет, в том-то и дело. Подозрения уже падают на веб, так как я взял с гит .sp файл с проверкой, все запросы проходят успешно. Вечером уже конкретно сяду и буду смотреть что к чему.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #8
@Phenom, если у Вас 301 статус летит - попробуйте вывести значение заголовка Location. В нем будет ссылка, куда произошёл редирект.
 
Сверху Снизу