REST API Не получает ничего

x330122

Участник
Сообщения
357
Реакции
152
Передаю запрос на php скрипт, ничего не получается в итоге.
C-подобный:
public void OnPluginStart()
{
httpClient = new HTTPClient("https://tetraxx.myarena.ru/");
httpClient.Get("donate/", OnTodoReceived);
}

public void OnTodoReceived(HTTPResponse response, any value)
{
    if (response.Status != HTTPStatus_OK) {
        // Failed to retrieve todo
        return;
    }
    if (response.Data == null) {
        // Invalid JSON response
        return;
    }

    // Indicate that the response is a JSON object
    JSONObject todo = view_as<JSONObject>(response.Data);

    char todoTitle[256];
    todo.GetString("roubles", todoTitle, sizeof(todoTitle));
    PrintToChatAll("%s ", todoTitle);
}
с php идет [{"roubles":"5"}]
 
Последнее редактирование:

FurFur

Участник
Сообщения
153
Реакции
85
response.Status какую цифру выдает?

Попробуй "donate/" без слеша так же.
 

x330122

Участник
Сообщения
357
Реакции
152
response.Status какую цифру выдает?

Попробуй "donate/" без слеша так же.
Вообще ничего не пишет
Вот смотри есть сайт(не реклама)http://tetraxx.myarena.ru/donate/, от туда надо roubles получить. Он заходит туда но не может понять что это JSON объект
--- Добавлено позже ---
Нельзя сделать так чтобы если просто в ответ на сайте выводит цифру, ее просто в плагин написать, а не через JSON все это делать ?
--- Добавлено позже ---
Уже не знаю что делать. Даже в блокноте раскрытый json ответ просто даже текстом вбил в файл, плагин просто не хочет брать что либо
 
Последнее редактирование:

FurFur

Участник
Сообщения
153
Реакции
85
Ну вот пример как сможешь получить

PHP:
public void OnPluginStart()
{
  httpClient = new HTTPClient("https://tetraxx.myarena.ru/donate/");
  httpClient.Get("", OnTodoReceived);
}

public void OnTodoReceived(HTTPResponse response, any value)
{
   JSONObject todo = view_as<JSONObject>(response.Data);
   char sRoubles[10];
   todo.GetString("roubles", sRoubles, 10);
   PrintToChatAll("%s ", sRoubles);
}
 

x330122

Участник
Сообщения
357
Реакции
152
Ну вот пример как сможешь получить

PHP:
public void OnPluginStart()
{
  httpClient = new HTTPClient("https://tetraxx.myarena.ru/donate/");
  httpClient.Get("", OnTodoReceived);
}

public void OnTodoReceived(HTTPResponse response, any value)
{
   JSONObject todo = view_as<JSONObject>(response.Data);
   char sRoubles[10];
   todo.GetString("roubles", sRoubles, 10);
   PrintToChatAll("%s ", sRoubles);
}
Я так и делаю. Ничего не выводит в чат. Может со скриптом php проблема или я незнаю ? Я уже просто набранным текстом передавал ответ, он сначала считал как надо, а потом вовсе перестал работать:censored:
 

Miste

Участник
Сообщения
26
Реакции
30
Привет. Для приема JSON строки на php нужно использовать конструкцию вида:
PHP:
$json_str = file_get_contents('php://input');
У json нет определенного формата данных, поэтому строка хранится как необработанные данные. Также, необходимо проверять являются ли данные нужного типа:
PHP:
function isJSON($string) {
      return ((is_string($string) && (is_object(json_decode($string)) || is_array(json_decode($string))))) ? true : false;
}
Собственно проверка после получения строки:
PHP:
if(!isJSON($json_str)) exit();
--- Добавлено позже ---
PHP:
HTTPClient httpClient;

public void OnPluginStart()
{
  httpClient = new HTTPClient("https://tetraxx.myarena.ru");
 
  JSONObject startInfo = new JSONObject(); // Новый JSON объект "startInfo"
  startInfo.SetInt("roubles", 5);
  startInfo.SetString("action", "value1");
  startInfo.SetString("key", "value2"); // И так далее   ...

  httpClient.Post("/donate/", startInfo, OnTodoReceived); // Отправляет запрос (страница обработки, передаваемые данные, сallback запроса)
 
  delete startInfo;
}

public void OnTodoReceived(HTTPResponse response, any value)
{
     // Проверка запроса на успешную доставку
    if(response.Status != HTTPStatus_Created) {
            PrintToServer("[INFO] The request is sent. Response != HTTPStatus_Created");
            return;
     }
     if (response.Data == null){
            PrintToServer("[INFO] Error when sending the request. Response.data == null");
            return;
      }
}
--- Добавлено позже ---
Получишь JSON cтроку на сервере:
PHP:
{"roubles": 5, "action": "value1", "key": "value2"}
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #7
Убери лишние слеши вообще. REST in Pawn их не любит, и по другому передаёт запрос. В отличие от браузера, он не убирает лишние слеши, а веб-сервак может и не разобраться, куда запрос идёт-то, и просто плюнуть 404.
PHP:
HTTPClient hClient = new HTTPClient("http://tetraxx.myarena.ru");
hClient.Get("donate/", OnTodoReceived);
 
Сверху Снизу