Преобразование запроса на завивку в запрос HTTPBuilder groovy/grails

Я делаю запрос на завивку: -

Curl -X POST -H "Тип контента: приложение/json" -H "Принять: приложение/json,текст/javascript" -d '[{"команда": "system.login", "пароль": "guesswhatIam" , "пользователь": "theuser"}]' -k "https://TheIpAddress/ajax?sid="

Ответ, который я получаю от Curl: -

[{"status":"ok","sid":"7dfb39fd-2945-46d8-9036-81bb4ff2d858","deadtime":0}]

Я пытаюсь придумать, как сделать эквивалент в Grails с использованием HTTPBuilder, и мне бы очень хотелось получить это значение sid.

Я попробовал это: -

    def http = new HTTPBuilder ('https://' + ipAddress+'/ajax?sid=')
    http.ignoreSSLIssues()
    http.headers = [Accept: 'application/json,text/javascript', charset: 'UTF-8', ContentType: 'application/json' ]
    http.request(POST) {
        uri.path = ''
        body = ['[{"command": "system.login", "password": "thepassword", "user": "theuser"}]']
        requestContentType = ContentType.JSON
        response.success = { resp,json ->
            print "Success! ${resp.status}"
            print json
        }

        response.failure = { resp ->
            println "Request failed with status ${resp.status}"
        }
    }

Я получаю 200 успехов, но не могу проанализировать полученные данные - кажется, я получаю ноль?

Любые указатели будут с благодарностью приняты.

Итак, что вы пробовали и почему это не сработало? Или вы просто хотите, чтобы кто-то конвертировал его за вас?

tim_yates 15.09.2023 12:54

Добавьте код, который вы пробовали, и причину сбоя (например, ошибки, трассировку стека, журналы и т. д.), чтобы мы могли его улучшить.

cfrick 15.09.2023 13:16

Да, конечно. Извинения. Я отредактирую пост, когда вернусь домой, чтобы показать вам, что я попробовал.

Simon 15.09.2023 21:48

«но я не могу проанализировать данные» — что это значит? что показывает println(json.dump())?

cfrick 16.09.2023 11:15

Json.dump() создает это: <groovy.util.slurpersupport.NodeChild@7046ff85 node=groovy.util.slurpersupport.Node@723e7f02 родитель=Loading...CZ | RU | Германия | ФР | ИТ | ЭС | РУ | Имя отладки=HTML namespacePrefix=* namespaceMap=[xml:w3.org/XML/1998/namespace] namespaceTagHints=[:]>

Simon 17.09.2023 17:41
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, в конце концов я отказался от HTTPBuilder и вернулся к Java. Это помогло мне: -

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Scanner;

    URL url = new URL("http://" + ipAddress + "/ajax?sid = ");
    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
    httpConn.setRequestMethod("POST");
    httpConn.setRequestProperty("Content-Type", "application/json");
    httpConn.setRequestProperty("Accept", "application/json,text/javascript");
    httpConn.setDoOutput(true);
    OutputStreamWriter writer = new OutputStreamWriter(httpConn.getOutputStream());        
    writer.write("[{\"command\": \"system.login\", \"password\": \"thePassworrd\", \"user\": \"theUser\"}]");
    writer.flush();
    writer.close();
    httpConn.getOutputStream().close();
    InputStream responseStream = httpConn.getResponseCode() / 100 == 2
            ? httpConn.getInputStream()
            : httpConn.getErrorStream();
    Scanner s = new Scanner(responseStream).useDelimiter("\\A");
    String response = s.hasNext() ? s.next() : "";
    return response;

Я надеюсь, что это поможет кому-то еще с подобной проблемой.

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