Я делаю запрос на завивку: -
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 успехов, но не могу проанализировать полученные данные - кажется, я получаю ноль?
Любые указатели будут с благодарностью приняты.
Добавьте код, который вы пробовали, и причину сбоя (например, ошибки, трассировку стека, журналы и т. д.), чтобы мы могли его улучшить.
Да, конечно. Извинения. Я отредактирую пост, когда вернусь домой, чтобы показать вам, что я попробовал.
«но я не могу проанализировать данные» — что это значит? что показывает println(json.dump())?
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=[:]>

Итак, в конце концов я отказался от 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;
Я надеюсь, что это поможет кому-то еще с подобной проблемой.
Итак, что вы пробовали и почему это не сработало? Или вы просто хотите, чтобы кто-то конвертировал его за вас?