【发布时间】:2012-03-25 19:49:11
【问题描述】:
我正在使用 Jsoup 向网站发布表单,回复是纯文本,但 Jsoup 不知道内容类型。因此我使用了ignoreContentType(true),所以Jsoup不会因为未知的内容类型而抛出异常。但是我不知道如何从 Jsoup 获取原始回复,文本包含一些特殊字符,Jsoup 会剥离,Jsoup 还添加了正文和 html 标签 - 我不需要,我只想要原始回复。如何获得原始回复?谢谢!
【问题讨论】:
我正在使用 Jsoup 向网站发布表单,回复是纯文本,但 Jsoup 不知道内容类型。因此我使用了ignoreContentType(true),所以Jsoup不会因为未知的内容类型而抛出异常。但是我不知道如何从 Jsoup 获取原始回复,文本包含一些特殊字符,Jsoup 会剥离,Jsoup 还添加了正文和 html 标签 - 我不需要,我只想要原始回复。如何获得原始回复?谢谢!
【问题讨论】:
您可以为此使用Response#body()。例如
String body = Jsoup.connect(url).execute().body();
或者如果你在做 POST
String body = Jsoup.connect(url).method(Method.POST).data(data).execute().body();
【讨论】:
您可以从Connection 获取Response 对象,它包含原始字节数据。忽略内容类型,否则它将在非文本数据上失败。如果您使用body(),它可能会使用默认字符集破坏响应。
Connection conn = Jsoup.connect(url).ignoreContentType(true).method(Method.GET);
Connection.Response response = conn.execute();
byte[] raw = response.bodyAsBytes();
// if you want...
Document parsed = response.parse();
【讨论】:
我遇到了同样的问题,分两步解决
1- 收集响应
2- 将响应读取为字节并转换为字符串或解析为您想要的任何内容(json 等)
Response resp = jsoup.connect(url).ignoreContentType(true).Method(Method.Post).execute();
String respStr = new String(resp.bodyAsBytes(), StandardCharsets.UTF_8);
【讨论】: