当前位置: 首页 > 面试题库 >

sun.net.www.protocol.https.HttpsURLConnectionImpl无法转换为sun.net.www.protocol.http.HttpURLConnection

习宸
2023-03-14
问题内容

我正在使用selenium库进行测试。但是下面的代码给了我类强制转换异常。我已经用谷歌搜索了这个异常,但是没有得到解决方案。我对Https连接和http连接感到困惑。帮助我解决此异常。谢谢

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import sun.net.www.protocol.http.HttpURLConnection;


public class TestMakeMySushi {

  private static final String HttpURLConnection = null;

   public static void main(String[] args) throws InterruptedException, MalformedURLException, IOException {

    System.setProperty("webdriver.chrome.driver", "C:\\Users\\Dev-24\\Downloads\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.manage().deleteAllCookies();
    driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
    driver.get("https://www.makemysushi.com/404?");

    List<WebElement> linklist = driver.findElements(By.tagName("a"));
    linklist.addAll(driver.findElements(By.tagName("img")));
    System.out.println("size of all link and images list" + linklist.size());
    List<WebElement> activelist = new ArrayList<WebElement>();

    for (int i = 0; i < linklist.size(); i++) {
        System.out.println(linklist.get(i).getAttribute("href"));
        if (linklist.get(i).getAttribute("href") != null && (!linklist.get(i).getAttribute("href").contains("javascript"))) {
            activelist.add(linklist.get(i));
        }
    }


    System.out.println("size of activelink list" + activelist.size());


    for (int j = 0; j < activelist.size(); j++) {

        HttpURLConnection connection = (HttpURLConnection) new URL(activelist.get(j).getAttribute("href")).openConnection();
        connection.connect();
        String response = connection.getResponseMessage();
        connection.disconnect();
        System.out.println(activelist.get(j).getAttribute("href") + "----" + response);
    }
}
}

我面临的例外

Exception in thread "main" java.lang.ClassCastException:   sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to sun.net.www.protocol.http.HttpURLConnection
at TestMakeMySushi.main(TestMakeMySushi.java:76)
C:\Users\Dev-24\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1

问题答案:

@KarolDowbecki的分析方向正确。

代替sun.net.www.protocol.http.HttpURLConnection; HttpURLConnection
应该通过以下方式解决:

import java.net.HttpURLConnection;

我能够执行您的程序,并产生以下输出:

size of all link and images list81
https://makemysushi.com/404#navigation
https://makemysushi.com/
https://makemysushi.com/
https://makemysushi.com/sushi-university
https://makemysushi.com/sushi-recipes
https://makemysushi.com/sushi-essentials
https://makemysushi.com/store
https://www.facebook.com/Makemysushi/
https://www.instagram.com/explore/tags/makemysushi/
https://plus.google.com/+Makemysushi
mailto:info@makemysushi.com   // <-- this href attribute is of MailToURLConnection type raising the java.lang.ClassCastException which can't be casted to HttpURLConnection type
.
.
.
https://makemysushi.com/Sushi-share/contact-us
https://makemysushi.com/Sushi-share/about-us
null
null
null
null
size of activelink list77
https://makemysushi.com/404#navigation----Not Found
https://makemysushi.com/----OK
https://makemysushi.com/----OK
https://makemysushi.com/sushi-university----OK
https://makemysushi.com/sushi-recipes----OK
https://makemysushi.com/sushi-essentials----OK
https://makemysushi.com/store----OK
https://www.facebook.com/Makemysushi/----OK
https://www.instagram.com/explore/tags/makemysushi/----OK
https://plus.google.com/+Makemysushi----OK
Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.mailto.MailToURLConnection cannot be cast to java.net.HttpURLConnection
    at demo.TestMakeMySushi.main(TestMakeMySushi.java:48)

原因

列表 activelist 包含一个元素:

<a href="mailto:info@makemysushi.com" target="_blank"><i id="social-em" class="fa fa-envelope-square fa-3x social"></i></a>

当您尝试通过 href 属性 **mailto:info@makemysushi.com 建立连接时, 如下所示** :

HttpURLConnection connection = (HttpURLConnection) new URL(activelist.get(j).getAttribute("href")).openConnection();

无法建立成功的连接,因为 MailToURLConnection 对象无法转换为 HttpURLConnection 对象,并引发
java.lang.ClassCastException



 类似资料:
  • 问题内容: 为什么写: 问题答案: 实现的对象是。 您要在其中覆盖的方法应将对象作为参数,而将其强制转换为。您的实现应描述如何与另一个进行比较。 要真正进行排序,您可能还需要制作工具,然后将实际逻辑复制粘贴到其中。

  • 问题内容: 我当前正在使用条件来检索用户的详细信息,但是当尝试用合适的用户查询详细信息对象时,我得到了ClassCastException。 我的标准代码; 我也尝试使用; 两者都给我ClassCastException。我知道我可以通过让用户实现Serializable来轻松解决它,但是还有其他解决方案吗? 问题答案: 唯一的其他解决方案是实现Externalizable。

  • 问题内容: 我已经编写了一个通用类,下面是该类的构造函数。我想像这样写 由于我不知道运行时的泛型类型,因此它将引发异常。 有什么办法解决这些问题?E的声明是 这就是我要打电话的方式 更新 家伙,谢谢您的帮助。我在搞泛型,所以问题就被创建了。这是所有导致问题的代码- 更新2 :似乎除了传递下面的答案中提到的类类型外,我们无法做到这一点。 问题答案: 这是重现异常所需的最最少的代码。 Java泛型使用

  • 问题内容: 在我的应用程序中,我为gcm ccs(xmpp)运行这些代码,并且代码显示以下错误执行时发生错误 这是代码: 问题答案: 您如何申报?我想它是简单的,如果是这样,请将其更改为: 此异常的原因与以下代码中发生的原因类似: Java中的VarArgs是作为数组实现的,因此,当您将sendTask声明为as时,编译器将使用with进行调用,但是当您将then 声明为then 时,则将使用wi

  • 问题内容: 我的程序看起来像 数据看起来像 在运行该程序时,我在控制台上看到以下内容 我相信Class Types是正确映射的, Class Mapper , 请让我知道我在这里做错了什么吗? 问题答案: 当您使用M / R程序读取文件时,映射器的输入键应为 文件中该行的索引 ,而输入值将为整行。 因此,这里正在发生的事情是您试图将行索引作为错误的对象,并且您需要一个替代项,以便Hadoop不会抱

  • 问题内容: 我想对成绩簿方法使用2D数组,其中包含学生姓名,然后是考试成绩。在课堂上,我有以下内容。 但是我得到一个错误int []无法转换为int。 问题答案: 你有: 但是是一个。数组维数必须为,因此不能用作数组维数(鉴于字面量是多少,我可以理解您对错误的困惑:它想要一个,但您给了它一个)。 从您的描述来看,我猜您的意思是: 哪里是你需要的,包含考试的次数。不过,只是一个猜测。