Android,为什么HttpPost方法在Android v2.3和Android v4.0.3中返回两个不同的结果?

Android,为什么HttpPost方法在Android v2.3和Android v4.0.3中返回两个不同的结果?,android,proxy,http-post,Android,Proxy,Http Post,我创建了一个示例代码来比较两种不同的Android操作系统v2.3和v4.0中HttpPost方法的输出。我有一张sim卡,我正在使用运营商的3G服务。因此,我通过3G服务连接到互联网。代理服务器地址和端口由移动运营商自动设置,两者相同 我的代码如下: public class MainActivity extends Activity { private final String TAG = "MainActivity"; @Override public void

我创建了一个示例代码来比较两种不同的Android操作系统v2.3和v4.0中HttpPost方法的输出。我有一张sim卡,我正在使用运营商的3G服务。因此,我通过3G服务连接到互联网。代理服务器地址和端口由移动运营商自动设置,两者相同

我的代码如下:

public class MainActivity extends Activity {

    private final String TAG = "MainActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        Log.i(TAG, "inside onCreate()...");


        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo();

        if (activeNetwork != null) {
            Log.i(TAG, "Internet connection found.");
            new MyAsyncTask().execute();
        } else
            Log.i(TAG, "Internet connection not found.");
    }

    private class MyAsyncTask extends AsyncTask<Void, Void, Boolean> {
        @Override
        protected void onPreExecute() {
            Log.i(TAG, "onPreExecute()...");
        }

        @Override
        protected Boolean doInBackground(Void... arg0) {
            boolean status = false;

            String xml = postData();    
            if(xml != null)
                status = true;

            return status;
        }

        @Override
        protected void onPostExecute(Boolean result) {
            if (result) 
                Log.i(TAG, "Process finished successfully...");
        }
    }

    private String postData() {
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?");

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
        nameValuePairs.add(new BasicNameValuePair("u", Uri.encode("test01")));
        nameValuePairs.add(new BasicNameValuePair("p", Encryption.encrypt("112233")));
        nameValuePairs.add(new BasicNameValuePair("v", "1.1"));
        nameValuePairs.add(new BasicNameValuePair("t", "0"));

        try {
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            Log.i("Requestd Connection", httppost.getURI().toString());


            HttpResponse response = httpClient.execute(httppost);
            String responseBody = EntityUtils.toString(response.getEntity());
            Log.i("Server Response: ", responseBody);

            if (response.containsHeader("Set-Cookie")) {
                String sessionId = extractSessionId(response.getHeaders("Set-Cookie")[0].getValue());
//              PropertyManager.setSessionID(sessionId);
                Log.i("Session Id:", sessionId);
            } else
                Log.e("ERROR", "Response doesn't have Set-Cookie in header");

                return responseBody;

        } catch(UnsupportedEncodingException usee) {
            usee.printStackTrace();
        } catch(ClientProtocolException cpe) {
            cpe.printStackTrace();
        } catch(IOException ioe) {
            ioe.printStackTrace();
        }

        return null;
    }

    private String extractSessionId(String str) {
        String session = null;
        if (str!=null)
            session = str.substring(0, str.indexOf(";"));
        return session;
    }
}
公共类MainActivity扩展活动{
私有最终字符串TAG=“MainActivity”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.i(标记“insideoncreate()…”;
ConnectivityManager connMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo activeNetwork=connMgr.getActiveNetworkInfo();
if(activeNetwork!=null){
Log.i(标记“找到Internet连接”);
新建MyAsyncTask().execute();
}否则
Log.i(标记“未找到Internet连接”);
}
私有类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
Log.i(标记“onPreExecute()…”;
}
@凌驾
受保护的布尔doInBackground(无效…arg0){
布尔状态=假;
字符串xml=postData();
if(xml!=null)
状态=真;
返回状态;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果)
Log.i(标记“进程成功完成…”);
}
}
私有字符串postData(){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?");
List nameValuePairs=新的ArrayList(4);
添加(新的BasicNameValuePair(“u”,Uri.encode(“test01”));
添加(新的BasicNameValuePair(“p”,Encryption.encrypt(“112233”));
添加(新的BasicNameValuePair(“v”、“1.1”);
添加(新的BasicNameValuePair(“t”,“0”));
试一试{
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
Log.i(“请求的连接”,httppost.getURI().toString());
HttpResponse response=httpClient.execute(httppost);
String ResponseBy=EntityUtils.toString(response.getEntity());
Log.i(“服务器响应:”,响应主体);
if(response.containsHeader(“Set Cookie”)){
字符串sessionId=extractSessionId(response.getHeaders(“Set Cookie”)[0].getValue());
//PropertyManager.setSessionID(sessionId);
Log.i(“会话Id:,会话Id”);
}否则
Log.e(“错误”,“响应头中没有设置Cookie”);
返回响应体;
}捕获(不支持DencodingException usee){
usee.printStackTrace();
}捕获(客户端协议异常cpe){
printStackTrace();
}捕获(ioe异常ioe){
ioe.printStackTrace();
}
返回null;
}
私有字符串extractSessionId(字符串str){
字符串会话=null;
如果(str!=null)
session=str.substring(0,str.indexOf(“;”));
返回会议;
}
}
当我在Android v2.3设备(三星Galaxy S)上运行此应用程序时,我在logcat中的输出如下:

07-09 18:21:11.031: I/MainActivity(1277): inside onCreate()...
07-09 18:21:11.035: I/MainActivity(1277): Internet connection found.
07-09 18:21:11.035: I/MainActivity(1277): onPreExecute()...
07-09 18:21:11.718: I/Requestd Connection(1277): http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?
07-09 18:21:13.941: I/Server Response:(1277): <TD ID="LGFLAG">S</TD><TD ID="LGMSG"></TD><TD ID="CLNT_0">CLNTXXX,EF TEST,C,001,</TD>
07-09 18:21:13.941: I/Session Id:(1277): ASPNETSESSIONID=jjodj3m22notn1m50oxs0u55
07-09 18:21:13.941: I/MainActivity(1277): Process finished successfully...
07-09 18:08:45.085: I/MainActivity(19358): inside onCreate()...
07-09 18:08:45.090: I/MainActivity(19358): Internet connection found.
07-09 18:08:45.090: I/MainActivity(19358): onPreExecute()...
07-09 18:08:45.155: I/Requestd Connection(19358): http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?
07-09 18:08:46.235: I/Server Response:(19358): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
07-09 18:08:46.235: I/Server Response:(19358):     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
07-09 18:08:46.235: I/Server Response:(19358): <html xmlns="http://www.w3.org/1999/xhtml">
07-09 18:08:46.235: I/Server Response:(19358): <head>
07-09 18:08:46.235: I/Server Response:(19358): <title></title>
07-09 18:08:46.235: I/Server Response:(19358): </head>
07-09 18:08:46.235: I/Server Response:(19358): <body>
07-09 18:08:46.235: I/Server Response:(19358): <table>
07-09 18:08:46.235: I/Server Response:(19358): <tr>
07-09 18:08:46.235: I/Server Response:(19358): <td id="LGFLAG">S</td>
07-09 18:08:46.235: I/Server Response:(19358): <td id="LGMSG"></td>
07-09 18:08:46.235: I/Server Response:(19358): <td id="CLNT_0">CLNTXXX,EF TEST,C,001,</td>
07-09 18:08:46.235: I/Server Response:(19358): </tr>
07-09 18:08:46.235: I/Server Response:(19358): </table>
07-09 18:08:46.235: I/Server Response:(19358): </body>
07-09 18:08:46.235: I/Server Response:(19358): </html>
07-09 18:08:46.235: E/ERROR(19358): Response doesn't have Set-Cookie in header
07-09 18:08:46.440: I/MainActivity(19358): Process finished successfully...
07-09 18:21:11.031:I/main活动(1277):内部onCreate()。。。
07-09 18:21:11.035:I/main活动(1277):找到Internet连接。
07-09 18:21:11.035:I/main活动(1277):onPreExecute()。。。
07-09 18:21:11.718:I/Requestd连接(1277):http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?
07-09 18:21:13.941:I/服务器响应:(1277):SCLNTXXX,EF测试,C,001,
07-09 18:21:13.941:I/会话Id:(1277):ASPNETSESSIONID=jjodjm22notn1m50oxs0u55
07-09 18:21:13.941:I/MainActivity(1277):进程已成功完成。。。
然而,当我在Android V4.0.3(三星Galaxy 2或HTC Xperia)上运行应用程序时,logcat中的输出如下:

07-09 18:21:11.031: I/MainActivity(1277): inside onCreate()...
07-09 18:21:11.035: I/MainActivity(1277): Internet connection found.
07-09 18:21:11.035: I/MainActivity(1277): onPreExecute()...
07-09 18:21:11.718: I/Requestd Connection(1277): http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?
07-09 18:21:13.941: I/Server Response:(1277): <TD ID="LGFLAG">S</TD><TD ID="LGMSG"></TD><TD ID="CLNT_0">CLNTXXX,EF TEST,C,001,</TD>
07-09 18:21:13.941: I/Session Id:(1277): ASPNETSESSIONID=jjodj3m22notn1m50oxs0u55
07-09 18:21:13.941: I/MainActivity(1277): Process finished successfully...
07-09 18:08:45.085: I/MainActivity(19358): inside onCreate()...
07-09 18:08:45.090: I/MainActivity(19358): Internet connection found.
07-09 18:08:45.090: I/MainActivity(19358): onPreExecute()...
07-09 18:08:45.155: I/Requestd Connection(19358): http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?
07-09 18:08:46.235: I/Server Response:(19358): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
07-09 18:08:46.235: I/Server Response:(19358):     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
07-09 18:08:46.235: I/Server Response:(19358): <html xmlns="http://www.w3.org/1999/xhtml">
07-09 18:08:46.235: I/Server Response:(19358): <head>
07-09 18:08:46.235: I/Server Response:(19358): <title></title>
07-09 18:08:46.235: I/Server Response:(19358): </head>
07-09 18:08:46.235: I/Server Response:(19358): <body>
07-09 18:08:46.235: I/Server Response:(19358): <table>
07-09 18:08:46.235: I/Server Response:(19358): <tr>
07-09 18:08:46.235: I/Server Response:(19358): <td id="LGFLAG">S</td>
07-09 18:08:46.235: I/Server Response:(19358): <td id="LGMSG"></td>
07-09 18:08:46.235: I/Server Response:(19358): <td id="CLNT_0">CLNTXXX,EF TEST,C,001,</td>
07-09 18:08:46.235: I/Server Response:(19358): </tr>
07-09 18:08:46.235: I/Server Response:(19358): </table>
07-09 18:08:46.235: I/Server Response:(19358): </body>
07-09 18:08:46.235: I/Server Response:(19358): </html>
07-09 18:08:46.235: E/ERROR(19358): Response doesn't have Set-Cookie in header
07-09 18:08:46.440: I/MainActivity(19358): Process finished successfully...
07-09 18:08:45.085:I/main活动(19358):内部onCreate()。。。
07-09 18:08:45.090:I/main活动(19358):找到Internet连接。
07-09 18:08:45.090:I/main活动(19358):onPreExecute()。。。
07-09 18:08:45.155:I/Requestd连接(19358):http://demo.excelforce.com.my/mobiletraderjssb/dopwd.aspx?
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):S
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/服务器响应:(19358):CLNTXXX,EF测试,C,001,
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:I/Server响应:(19358):
07-09 18:08:46.235:E/错误(19358):响应未在标头中设置Cookie
07-09 18:08:46.440:I/MainActivity(19358):流程已成功完成。。。
正如您所看到的,我的XML数据由HTML代码包装。这个HTML代码来自哪里? 有人说可能是因为移动运营商自动设置了代理服务器。对吗?我认为这不应该是正确的,因为如果代理服务器在v4.0.3中操纵我的代码或向我的代码中注入一些东西,为什么我对Android v2.0和v3.0没有相同的响应?是因为安卓v4.0内部的漏洞吗


如有任何建议,我们将不胜感激。

请求中似乎缺少接受内容类型

加点