【问题标题】:Android vs. Java on PC : Different HttpResponse?PC 上的 Android 与 Java:不同的 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...
  • 我强烈建议 nottoString() 方法的输出用于任何实际的程序行为——它只是不可靠。而是从HttpResponse 获取特定部分或将其作为一个整体返回。

标签: java android http response 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 源代码,可在 stackoverflow.com/questions/449763/… 获得
    • 我完全同意你对不同实现的看法,我只是在术语上挑剔:库/框架类不是 VM 的一部分,Android 上根本没有 JVM,只有达尔维克虚拟机 :)
    • 你是绝对正确的 :) jvm != dvm 也不,http 组件是它的一部分。感谢您指出这一点 - 希望我的快速编辑能够清楚地说明这一点。
    猜你喜欢
    • 2014-05-23
    • 1970-01-01
    • 2022-07-21
    • 2012-10-20
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多