有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

jsoup这个代码有什么问题?(java)(错误:找不到符号方法getValue())

周围有**的地方抛出找不到符号方法getValue()错误

顺便说一下,代码是检查采矿工艺账户名称有效性的程序的一部分;如果有或没有

 public String connectToMigrate() {
  try {
  Connection.Response response = 
    Jsoup.connect("https://account.mojang.com/migrate").execute();
  Document doc = response.parse();
  Element authToken = doc.select("input[name^=authenticityToken]").get(0);
  Map cookies = response.cookies();
  Connection connection = 
    Jsoup.connect("https://account.mojang.com/migrate/check")
    .data("authenticityToken", authToken.val())
    .data("mcusername", this.username)
    .data("password", this.password)
    .method(Connection.Method.POST)
    .followRedirects(true);
  connection.timeout(10000);
  for (Object cookie : cookies.entrySet()) {
      connection.cookie((String) **cookie.getValue**(), (String)  **cookie.getKey**());
  }
  Connection.Response postResponse = connection.execute();
  if (postResponse.body().toLowerCase().contains("invalid username"))
    return "error";
  if (postResponse.body().toLowerCase().contains("already been migrated"))
    return "error";
  if (postResponse.body().toLowerCase().contains("locked out"))
    return "error";
  if (postResponse.body().toLowerCase().contains("bought minecraft"))
    return "error";
  if (postResponse.body().toLowerCase().contains("too many failed attempts")) {
    getNewProxy();
    return "try again";
  }
  if (postResponse.body().toLowerCase().contains("error")) {
    return "try again";
  }

  Map cookies2 = postResponse.cookies();
  Connection connection2 = 
    Jsoup.connect("https://account.mojang.com/migrate/chooseEmail");
  for (Object cookie : cookies2.entrySet()) {
      connection2.cookie((String) **cookie.getValue()**, (String) **cookie.getKey()**);
  }
  connection2.timeout(10000);
  Connection.Response postResponse2 = connection2.execute();
  String s = postResponse2.body().toLowerCase();
  s = s.split("i want to use <strong>")[1];
  s = s.split("</strong>")[0];
  String email = s;
  return email; } catch (Exception e) {
}return "try again";
}

共 (3) 个答案

  1. # 1 楼答案

    cookie是一个不包含getValue()方法的对象。在调用getValue()之前,需要将其强制转换为正确的类型

  2. # 2 楼答案

    我想你只是误解了如何在java中使用地图。 这应该很容易,试试这个:

    Map<String,String> cookies = response.cookies();
    [...]
    for ( Map.Entry<String,String> e : cookies.entrySet()){
        connection.cookie( e.getKey(), e.getValue() );
    }
    

    但是,您可以通过执行以下操作一次复制所有cookie:

    connection.cookies( response.cookies() ); 
    
  3. # 3 楼答案

    JSoupConnection.Response对象上的getCookies返回一个Map<String, String>

    因此,在您的第一个for循环中:

    for (Object cookie : cookies.entrySet())
    

    每个cookie都是一个Set,并且Set不支持这些方法(请参见docs

    相反,在这些循环中,您应该迭代Map键,这将是cookie名称:

    for (Object cookie : cookies.keySet())
    

    现在,每个cookie都是键,您可以使用cookies.get(cookie)查询原始映射中的值

    但是Jsoup的Connection已经允许您直接复制cookies(参见docs),无需循环:

    connection.cookies(response.cookies());