PC上的Android与Java:不同的HttpResponse?

时间:2011-11-03 18:05:41

标签: java android http response httpresponse

我在我的PC(Windows 7 64位,Eclipse,Java)和Android虚拟机上运行SAME代码,我得到了不同的结果。

它是一个小程序,可以完全以字符串形式打印HttpResponse。

PC上的结果:

  

HTTP / 1.1 405方法不允许[允许:GET,HEAD,日期:星期四,2011年11月3日17:57:22 GMT,Content-Type: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上将响应内容(标题)作为String?

2 个答案:

答案 0 :(得分:2)

这是因为HttpResponse.toString()在Android和PC上的实现方式不同(不同的jvm和框架组件实现!)。为了正确获取HttpHeaders,我猜你需要使用类似的东西:

http://developer.android.com/reference/org/apache/http/HttpMessage.html#getAllHeaders%28%29

无论如何,请参阅javadoc以供参考。

答案 1 :(得分:2)

您实际上并没有运行相同的代码。

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本身。