Java 局域网上的Android-httpget请求
我使用下面的代码从局域网上的Web服务器获取一个页面的源代码,它是一个纯文本,没有html标记。但我总是得到空字符串作为回报,如果我在浏览器中打开相同的URI,我可以看到文本。以下是我的代码:Java 局域网上的Android-httpget请求,java,android,Java,Android,我使用下面的代码从局域网上的Web服务器获取一个页面的源代码,它是一个纯文本,没有html标记。但我总是得到空字符串作为回报,如果我在浏览器中打开相同的URI,我可以看到文本。以下是我的代码: String url = "http://192.168.1.40/touchscreens/get.qsp?display=1"; HttpClient client = new DefaultHttpClient();
String url = "http://192.168.1.40/touchscreens/get.qsp?display=1";
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setHeader("Content-Type", "text/plain; charset=utf-8");
request.setURI(new URI(url));
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
String page = sb.toString();
Toast.makeText(getApplicationContext(), page, Toast.LENGTH_LONG).show();
还有一件事,当我在android emulator浏览器中输入相同的URL时,我什么也看不到。我遗漏了什么吗?我建议您应该使用fiddler调试HTTP请求,请参阅。这将调试来自浏览器和应用程序的internet请求,并显示您的请求是否缺少必要的头。使用IP调用时是否应该有一些端口?StringBuilder类通常应优先于StringBuffer类使用,因为它支持所有相同的操作,但速度更快,因为它没有执行同步。@ThinkStiple:它在端口80上工作,正如我所说,当我在google chrome中粘贴相同的url时,我成功地看到了文本。您的响应中有什么状态码?检查response.getStatus。但在上面的代码中,您错过了端口条目。以及findout状态代码。这是我的请求在fiddler2中的原始视图:GET HTTP/1.1主机:192.168.1.40连接:keep alive缓存控制:max age=0用户代理:Mozilla/5.0 Windows NT 6.1;WOW64 AppleWebKit/535.7 KHTML,像geckocrome/16.0.912.75 Safari/535.7 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8接受编码:gzip,deflate,sdch接受语言:en-GB,en-US;q=0.8,en;q=0.6接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3你应该问的问题是:fiddler对你的Android应用程序说了什么,而不是你的浏览器说了什么。你说浏览器可以工作,fiddler应该告诉你有什么不同。