我正在尝试获取用户输入的网址的图标,例如
_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希望使用字节,并且您要向其传递字符。试试这个: