下午好,
我一直在使用Android的HttpURLConnection对象向各种网站发出Http GET和POST请求几周,直到现在都没有遇到任何问题。
我最近被要求使用Https而不是Http向服务器发出GET请求。
我认为我需要做的就是将使用中的对象更改为HttpsURLConnection对象,以便访问该页面。
我可以验证我能够从桌面和移动浏览器访问该页面。 页面的输出只是文本 - 纯文本格式的项目列表(在服务器上用php生成)。
但是当我尝试使用我的Android应用程序下载信息时,我会在下面指定的位置出现IO异常错误(请参阅下面的代码块)。
下面的代码段在另一个线程中运行。它设法连接和设置连接参数,但在尝试打开输入流时失败。
不幸的是,错误信息对我来说并不重要。它只包含网站的网址,没有其他信息。
我的想法是:
a)我在使用Https连接时遗漏了一些东西 - 这里的任何提示都会很棒。 b)该网站正在采取与我过去所连接的所有其他基于Http的网站不同的东西 - 由于这个特定网站的性质,这不太可能。这里有任何关于可能阻止GET请求通过的可能性的建议。
还有待尝试:我计划尝试使用一些不同的技术从其他位置连接GET请求,以确保它不是我在我做的事情中做的事情Java代码。
希望很清楚。谢谢, 马特
@Override
public void run()
{
String response = null;
URL url;
try
{
url = new URL(urlstr);
HttpsURLConnection con;
try
{
con = (HttpsURLConnection) url.openConnection();
try
{
con.setRequestMethod("GET");
con.setReadTimeout(10000);
con.setConnectTimeout(3000);
con.setRequestProperty("User-Agent", "Mozilla/5.0");
//this is where we fall over - after this line....it raises an IOException - see below for details.
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
while(true)
{
int ch = in.read();
if(ch==-1)
{
break;
}
response = response + Character.toString((char) ch);
}
in.close();
}
catch (ProtocolException e)
{
}
}
catch (IOException e)
{
//IO Exception is raised. The error message (e.getMessage()) is simply the url string...not very helpful.
}
}
catch (MalformedURLException e1)
{
}
if(response!=null)
{
//do stuff with response...
}
}
这是堆栈跟踪:(我可以验证文件确实存在!)
04-24 15:16:22.854: W/System.err(12830): java.io.FileNotFoundException: https:// (IVE REMOVED THE WEBSITE FOR PRIVACY PURPOSES FOR NOW)
04-24 15:16:22.854: W/System.err(12830): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
04-24 15:16:22.854: W/System.err(12830): at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
04-24 15:16:22.854: W/System.err(12830): at com.lloydm.app.MainActivity$MainListing.run(MainActivity.java:1733)
04-24 15:16:22.854: W/System.err(12830): at java.lang.Thread.run(Thread.java:856)
(重新格式化堆栈跟踪)