【问题标题】:Get raw post reply from Jsoup从 Jsoup 获取原始帖子回复
【发布时间】:2012-03-25 19:49:11
【问题描述】:

我正在使用 Jsoup 向网站发布表单,回复是纯文本,但 Jsoup 不知道内容类型。因此我使用了ignoreContentType(true),所以Jsoup不会因为未知的内容类型而抛出异常。但是我不知道如何从 Jsoup 获取原始回复,文本包含一些特殊字符,Jsoup 会剥离,Jsoup 还添加了正文和 html 标签 - 我不需要,我只想要原始回复。如何获得原始回复?谢谢!

【问题讨论】:

    标签: java http jsoup


    【解决方案1】:

    您可以为此使用Response#body()。例如

    String body = Jsoup.connect(url).execute().body();
    

    或者如果你在做 POST

    String body = Jsoup.connect(url).method(Method.POST).data(data).execute().body();
    

    【讨论】:

    • 谢谢,这样就可以了,但是我想知道是否真的无法从 Jsoup 获取原始数据。我知道它是一个解析器,但也许还有一种方法? ;-)
    • 谢谢,但这仍然不是原始数据,除了添加的正文标签(不是真正的问题)一些特殊字符丢失/被 jsoup 删除):
    • @stefan.at.wpf,您确定您在使用 Response#body() 作为 BalusC 的答案吗?这只是将 HTTP 响应正文作为字符串提取出来。没有解析或任何处理完成。如果您看到 标记,我认为您正在使用 Document#body() 方法,这是不同的。您可以发布您的示例代码并指出您遇到问题的地方吗?
    【解决方案2】:

    您可以从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();
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,分两步解决

      1- 收集响应

      2- 将响应读取为字节并转换为字符串或解析为您想要的任何内容(json 等)

      Response resp = jsoup.connect(url).ignoreContentType(true).Method(Method.Post).execute();
      String respStr = new String(resp.bodyAsBytes(), StandardCharsets.UTF_8);
      

      【讨论】:

        猜你喜欢
        • 2010-11-24
        • 2018-05-16
        • 2021-12-15
        • 2012-05-14
        • 2021-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多