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

HttpURLConnection-“ https://”和“ http://”

陆耀
2023-03-14
问题内容

我正在尝试获取用户输入的网址的图标,例如

_url = "google.com";

我使用HttpUrlConnection /favicon.ico从主机URL 的扩展名中获取网站图标的位图。

        String faviconString = Uri.parse(_url).getHost() + "/favicon.ico";
        URL faviconUrl = null;
        Bitmap favicon = null;
        try
        {
            faviconString = "http://" + faviconString;
            faviconUrl = new URL(faviconString);
            HttpURLConnection connection = (HttpURLConnection) faviconUrl.openConnection();
            connection.setDoInput(true);
            connection.connect();
            favicon = BitmapFactory.decodeStream(connection.getInputStream());
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return favicon;

但是,由于用户可能不会指定http://https://,所以我必须自己添加它。我遇到的问题是,如果我http://在url前面添加,一切都会正常运行,但是对于https://,某些网站会返回该网站图标,而其他网站只会给我null。我如何找出使用哪个页面https?我应该http://为每种情况添加吗?是否有任何网站严格限制https并会返回null以供使用http


问题答案:

除非您使用user2558882的想法,否则除非有其他工具可以为您提供网站图标,否则您将必须同时检查http和https网址。没有其他方法可以做到这一点。这是使用网络的困难之一。

也许以不同的方式看待您的html" target="_blank">代码并将您尝试做的事情分解为更小,更易于管理的部分会更好一些?

public void getFavicon(String host) {

    URL httpUrl = this.getHttpUrl(host + "/favicon.ico");

    Bitmap favicon = this.getBitmap(httpUrl);

    if (favicon == null) {

        URL httpsUrl = this.getHttpsUrl(host + "/favicon.ico");

        favicon = this.getBitmap(httpsUrl);
    }

    if (favicon == null) {

        throw new FaviconMissingException("Unable to find favicon for host: " + host);
    }

    return favicon;
}

public URL getHttpUrl(String uri) throws MalformedURLException {

    // There are better ways of building a url then string concationation.
    return new URL("http://" + uri);
}

public URL getHttpsUrl(String uri) throws MalformedURLException {

    // There are better ways of building a url then string concationation.
    return new URL("https://" + uri);
}

public Bitmap getBitmap(URL url) {

    InputStream inputStream = getInputStream(url);

    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

    return bitmap
}

public InputStream getInputStream(URL url) {

    // Please use a real connection library like HTTPClient here!
    // HttpClient will handle timeouts, redirects, and things like that for you.
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoInput(true);
    connection.connect();

    return connection.getInputStream();
}

顺便说一句,关注一个或两个连接需要花费更多时间,然后编写代码以发出两个请求。我几乎保证Google会根据需要发出两个请求。如果它对Google足够好,对我来说也足够好。

最后,如果您开始发现发出两个请求确实花费了太多时间,则可以采取一些措施来提高性能。



 类似资料:
  • 问题是,我如何处理SSL和非SSL连接?在PHP中,当使用CURL时,设置忽略SSL检查 我在Linux、Spring框架和TomCat Web服务器上。 有人吗?

  • 问题内容: 在阅读了Java HttpURLConnection上的所有文档之后,我仍然很困惑,因为它执行哪种池化以及如何处理连接。 例如下面的代码 是否都需要冲洗并关闭两者,以使基础套接字可重复使用? 是否会关闭底层套接字(从而使其无法重用)?是否会影响这种行为? 如果我使用不同的URL对象,但具有相同的URL,则从它们创建的s是否共享底层套接字?URL的主机部分相同但路径不同时如何? 何时会破

  • 问题内容: 我不明白为什么Java 不遵循从HTTP到HTTPS URL的HTTP重定向。我使用以下代码在https://httpstat.us/上获取页面: 该程序的输出为: 对http://httpstat.us/301的请求返回以下(缩短的)响应(这似乎绝对正确!): 不幸的是,Java HttpURLConnection不遵循重定向! 问题答案: 仅当重定向使用相同的协议时,才遵循重定向。

  • 问题内容: 尝试按以下说明设置https:https://github.com/astaxie/beego/issues/401并将其保存在日志中: 我正在Windows 10上运行它。有人让Beego使用https吗?我使用了自签名证书,该证书对于通用golang https简单程序很好用。 问题答案: 在Chrome和名为Postman的Chrome扩展程序中进行了测试。通过设置chrome:

  • 主要内容:1 什么是Java HttpURLConnection,2 如何获取HttpURLConnection对象,3 Java HttpURLConnection的例子1 什么是Java HttpURLConnection Java HttpURLConnection类是http特定的URLConnection。它仅适用于HTTP协议。 借助于HttpURLConnection类,您可以获取任何HTTP URL的信息,例如请求头信息,状态代码,响应代码等。 java.net.HttpURLC

  • 问题内容: 如何使用HttpURLConnection发布JSON数据?我正在尝试: 我在第14行中收到编译错误。 cURL请求为: 这是处理cURL请求的方法吗?任何信息对我都会非常有帮助。 谢谢。 问题答案: OutputStream希望使用字节,并且您要向其传递字符。试试这个: