我在Android应用中获取网页内容时遇到问题。我想阅读这个地址https://szr.szczecin.pl/utms/data/layers/VMSPublic的内容。
起初我尝试使用此代码在Java中执行此操作:
public class Main {
public static void main(String[] args) {
String https_url = "https://szr.szczecin.pl/utms/data/layers/VMSPublic";
URL url;
try {
url = new URL(https_url);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
print_content(con);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void print_content(HttpsURLConnection con) {
if (con != null) {
try {
System.out.println("****** Content of the URL ********");
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
String input;
while ((input = br.readLine()) != null) {
System.out.println(input);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我从该网页下载并安装了证书后,工作正常。我怎样才能在Android中做同样的事情?我在Android中尝试过HTTPSURLConnection,但它只返回网页的地址。当我尝试HTTPURLConnection时,它向我提供了文档被移动的信息(状态302)。
答案 0 :(得分:2)
您可以尝试以下代码:
public static String getResponseFromUrl(String url) {
HttpClient httpclient = new DefaultHttpClient(); // Create HTTP Client
HttpGet httpget = new HttpGet(URL); // Set the action you want to do
HttpResponse response = httpclient.execute(httpget); // Executeit
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent(); // Create an InputStream with the response
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
sb.append(line);
String resString = sb.toString();
is.close();
return resString;
}
答案 1 :(得分:2)
您是否尝试在您的应用中将目标sdk设置为23,这是使用Apache HttpClient进行所有网络相关操作?如果是的话,这是一个坏消息。 Android 6.0(API Level 23)版本删除了对Apache HTTP客户端的支持。因此,您不能直接在API 23中使用此库。但有一种方法可以使用它。在build.gradle文件中添加useLibrary'org.apache.http.legacy',如下所示 -
android {
useLibrary 'org.apache.http.legacy'
}
如果这不起作用,您可以应用以下黑客 -
- 复制org.apache.http.legacy.jar,它位于/ SDK / android-23 / Android SDK目录的可选路径中,位于项目的app / libs文件夹中。
- 现在在build.gradle文件的dependencies {}部分中添加编译文件('libs / org.apache.http.legacy.jar')。