PC 上的 Android 与 Java:不同的 HttpResponse?
Posted
技术标签:
【中文标题】PC 上的 Android 与 Java:不同的 HttpResponse?【英文标题】:Android vs. Java on PC : Different HttpResponse? 【发布时间】:2011-12-21 10:29:12 【问题描述】:我在我的 PC(Windows 7 64 位、Eclipse、Java)和 android 虚拟机上运行相同的代码,得到不同的结果。
它是一个小程序,可以将 HttpResponse 完全打印为字符串。
PC 上的结果:
HTTP/1.1 405 方法不允许 [允许:GET,HEAD,日期:星期四,2011 年 11 月 3 日 17:57:22 GMT,内容类型:text/html; charset=UTF-8,服务器:gws,内容长度:11816,X-XSS-Protection:1; mode=block, X-Frame-Options: SAMEORIGIN]
Android 上的结果:
org.apache.http.message.BasicHttpResponse@44ec9da8
我在 PC 上运行的代码是:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://www.google.com");
try
HttpResponse response = httpclient.execute(httppost);
System.out.println(response.toString());
在 Android 上:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://www.google.com");
try
HttpResponse response = httpclient.execute(httppost);
return response.toString();
我问是因为我写了一个可以在 PC 上运行的应用程序 - 与 HttpResponse 内容一起工作 - 但在 android 上似乎根本没有内容......
谁能解释一下?或者告诉我如何在android上获取响应内容(标题)作为字符串?
【问题讨论】:
您是否在两者上使用相同版本的 httpClient? Andoid 的 httpClient 是一些 4beta... 我强烈建议 not 将toString()
方法的输出用于任何实际的程序行为——它只是不可靠。而是从HttpResponse
获取特定部分或将其作为一个整体返回。
【参考方案1】:
您实际上并没有运行相同的代码。
Android's BasicHttpResponse
目前根本没有toString()
方法,并继续调用java.lang.Object.toString()
给你fully.qualified.class.name@hashcode
。
您的桌面版 HttpClient 很可能有一个类似于 from HttpClient 4.1.3 的 toString():
public String toString()
return this.statusline + " " + this.headergroup;
将toString()
用于任何非调试/记录目的都不是好的做法——您应该使用实际的get 方法提取正确的信息,或者只返回HttpResponse
本身。
【讨论】:
【参考方案2】:这是因为 HttpResponse.toString() 在 Android 和 PC 上的实现方式不同(不同的 jvm 和框架组件实现!)。要正确获取 HttpHeaders,我想您需要使用以下内容:
http://developer.android.com/reference/org/apache/http/HttpMessage.html#getAllHeaders%28%29
无论如何,请参阅 javadoc 以供参考。
【讨论】:
这与JVM实现无关,但与HttpClient的实现有关,您仍然对不同的toString()
方法是正确的。
但是据我所知,HttpClient 是标准 android 框架的一部分,并且可能与“常规” apache http 组件的实现方式不同。如果您确实需要验证这一点,请查看 android 源代码,可在 ***.com/questions/449763/… 获得
我完全同意你对不同实现的看法,我只是在术语上挑剔:库/框架类不是 VM 的一部分,Android 上根本没有 JVM,只有达尔维克虚拟机 :)
你是绝对正确的 :) jvm != dvm 也不,http 组件是它的一部分。感谢您指出这一点 - 希望我的快速编辑能够清楚地说明这一点。以上是关于PC 上的 Android 与 Java:不同的 HttpResponse?的主要内容,如果未能解决你的问题,请参考以下文章
Web 应用程序设计在 iphone 和 android/pc 上看起来不同
Android-x86 4.4-r5 发布,PC 上的安卓系统
借助ESP8266 WIFI模块,实现Android手机有人网络调试助手(或Android手机网络调试助手)与PC端串口调试助手互相通信。