post請求方式和get請求方式等網絡請求方式總結

一,幾種請求方式的解析
第一種:get請求方式請求數據
向服務器發索取數據的一種請求,get是獲取信息,而不是修改信息,數據不會被修改,get請求的參數會跟在url(路徑)後進行傳遞,請求的數據會附在URL之後,以?分割URL和傳輸數據,參數之間以&相連。
String url="http://192.168.1.117:8080/web2/servlet/LoginServlet?name="+URLEncoder.encode(name)+"&pass="+pass;
get傳輸的數據有大小限制,因爲GET是通過url提交數據,不同的瀏覽器對URL的長度的限制是不同的。get請求的數據會被瀏覽器緩存起來,用戶名和密碼將明文出現在URL上,其他人可以查到歷史瀏覽記錄,數據不太安全。
第二種:post請求方式請求數據
向服務器提交數據的一種請求,post請求則作爲http消息的實際內容發送給web服務器,數據放置在HTMLHeader內提交,post沒有限制提交數據,post比get更安全。
String path = "http://192.168.1.117:8080/web2/servlet/LoginServlet";
String data="name="+URLEncoder.encode(name)+"&pass="+pass;
HttpClient框架已經將handler對象封裝好了,所以比get和post方式更方便
第三種:HttpClient框架請求數據
HttpClient框架把請求的方法封裝成了一個框架
與get和post請求類似:只是使用的對象不同,HttpClient直接把get請求和post請求的方法進行了封裝
HttpClient hc = new DefaultHttpClient();
HttpGet hg = new HttpGet(path);//get請求
HttpPost hp=new HttpPost(path);//post請求
第四種:異步HttpClient框架請求數據
異步HttpClient框架比HttpClient框架更簡單,他是藉助第三方工具jar包裏封裝好的對象和方法實現請求數據的
AsyncHttpClient ahc = new AsyncHttpClient();
ahc.get(url, new MyResponseHandler());
二,需要注意的事項
1,無論哪種請求方式都需要添加網絡權限
2,路徑的格式必須與服務器提供的完全保持一致,否則不能連接
3,如果字段名字寫錯會出現登陸失敗的情況
4,不要忘記把路徑傳參添加到請求方法中。否則請求不了
5,只要出現一點問題,都不會請求成功,所以一定要細心
6,get請求和post請求的方法get和post必須大寫

下面可以具體看一下源碼:
1,get請求方式請求數據:
public class MainActivity extends Activity {
Handler handler=new Handler(){
    public void handleMessage(Message msg) {
        Toast.makeText(getApplicationContext(), (CharSequence) msg.obj, 0).show();
    };
};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

public void click(View v){
    EditText et_name=(EditText) findViewById(R.id.et_name);
    EditText et_pass=(EditText) findViewById(R.id.et_pass);
    final String name=et_name.getText().toString().trim();
    final String pass=et_pass.getText().toString().trim();
    new Thread(){
        public void run() {
            String path="http://192.168.1.117:8080/web2/servlet/LoginServlet?name="+URLEncoder.encode(name)+"&pass="+pass;
        try {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setReadTimeout(3000);
            conn.setConnectTimeout(3000);
            conn.connect();
            if(conn.getResponseCode()==200){
                InputStream is = conn.getInputStream();
                BufferedReader in = new BufferedReader(new InputStreamReader(is,"GBK"));
                StringBuffer buffer = new StringBuffer();
                String line="";
                while((line=in.readLine())!=null){
                    buffer.append(line);
                }
                String text=buffer.toString();
                Message msg = new Message();
                msg.obj=text;
                handler.sendMessage(msg);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        };
    }.start();
}

}
2,post請求方式請求數據
public class MainActivity extends Activity {
Handler handler=new Handler(){
    public void handleMessage(Message msg) {
        Toast.makeText(MainActivity.this, (String) msg.obj, 0).show();
    };
};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
public void click(View v){
    EditText et_name=(EditText) findViewById(R.id.et_name);
    EditText et_pass=(EditText) findViewById(R.id.et_pass);
    final String name=et_name.getText().toString().trim();
    final String pass=et_pass.getText().toString().trim();
    
    new Thread(){
        public void run() {
            String path = "http://192.168.1.117:8080/web2/servlet/LoginServlet";
            try {
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setRequestMethod("POST");
                conn.setReadTimeout(3000);
                conn.setConnectTimeout(3000);                
                String data="name="+URLEncoder.encode(name)+"&pass="+pass;
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                conn.setRequestProperty("Content-Length", data.length()+"");                
                conn.setDoOutput(true);                
                OutputStream os = conn.getOutputStream();
                os.write(data.getBytes());
                conn.connect();
                if(conn.getResponseCode()==200){
                    InputStream is = conn.getInputStream();
                    BufferedReader in = new BufferedReader(new InputStreamReader(is,"GBK"));
                    StringBuffer buffer = new StringBuffer();
                    String line="";
                    while((line=in.readLine())!=null){
                        buffer.append(line);
                        
                    }
                    String text=buffer.toString();
                    Message msg = handler.obtainMessage();
                    msg.obj=text;
                    handler.sendMessage(msg);
                }
                    
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        };
    }.start();    
}
}
3,HttpClient框架請求數據
public class MainActivity extends Activity {
Handler handler=new Handler(){
    public void handleMessage(Message msg) {
        Toast.makeText(getApplicationContext(), (CharSequence) msg.obj, 0).show();
    };
};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    }
HttpClient框架get請求方式
    public void get(View v){
        EditText et_name = (EditText) findViewById(R.id.et_name);
        EditText et_pass = (EditText) findViewById(R.id.et_pass);
        
        final String name = et_name.getText().toString();
        final String pass = et_pass.getText().toString();
        
        new Thread(){
            public void run() {
                String path= "http://192.168.1.117:8080/web2/servlet/LoginServlet?name=" + URLEncoder.encode(name) + "&pass=" + pass;
                HttpClient hc = new DefaultHttpClient();
                HttpGet hg = new HttpGet(path);
                try {
                    HttpResponse hr = hc.execute(hg);
                    StatusLine sl = hr.getStatusLine();
                    if(sl.getStatusCode() == 200){
                        HttpEntity he = hr.getEntity();
                        InputStream is = he.getContent();
                        BufferedReader in = new BufferedReader(new InputStreamReader(is,"GBK"));
                    StringBuffer buffer = new StringBuffer();
                    String line="";
                    while((line=in.readLine())!=null){
                        buffer.append(line);
                    }
                    String text=buffer.toString();
                    Message msg = new Message().obtain();
                    msg.obj=text;
                    handler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            };
        }.start();
    }
HttpClient框架post請求方式
public void post(View v){
    EditText et_name = (EditText) findViewById(R.id.et_name);
    EditText et_pass = (EditText) findViewById(R.id.et_pass);
    final String name = et_name.getText().toString();
    final String pass = et_pass.getText().toString();
    new Thread(){
        public void run() {
            String path="http://192.168.1.117:8080/web2/servlet/LoginServlet";
            HttpClient hc=new DefaultHttpClient();
            //不要忘了把path傳入
            HttpPost hp=new HttpPost(path);
            BasicNameValuePair bnvp1=new BasicNameValuePair("name",name);
            BasicNameValuePair bnvp2=new BasicNameValuePair("pass",pass);
            List<BasicNameValuePair> parameters=new ArrayList<BasicNameValuePair>();
            parameters.add(bnvp1);
            parameters.add(bnvp2);
            try {
                UrlEncodedFormEntity entity=new UrlEncodedFormEntity(parameters,"utf-8");
                hp.setEntity(entity);
                HttpResponse hr = hc.execute(hp);
                if(hr.getStatusLine().getStatusCode()==200){
                    InputStream is = hr.getEntity().getContent();
                    BufferedReader in = new BufferedReader(new InputStreamReader(is,"GBK")) ;
                        StringBuffer buffer = new StringBuffer();
                        String line="";
                        while((line=in.readLine())!=null){
                            buffer.append(line);
                        }
                        String text=buffer.toString();
                        Message msg = handler.obtainMessage();
                        msg.obj=text;
                        handler.sendMessage(msg);
                
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }            
        };    
    }.start();
}

}
4,異步HttpClient框架請求數據
先導入第三方工具包至src文件夾中
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void get(View v){
        EditText et_name = (EditText) findViewById(R.id.et_name);
        EditText et_pass = (EditText) findViewById(R.id.et_pass);
        
        final String name = et_name.getText().toString();
        final String pass = et_pass.getText().toString();
        String url = "http://192.168.1.117:8080/web2/servlet/LoginServlet?name=" + URLEncoder.encode(name) + "&pass=" + pass;
        AsyncHttpClient ahc = new AsyncHttpClient();
        ahc.get(url, new MyResponseHandler());
}
     public void post(View v){
            EditText et_name = (EditText) findViewById(R.id.et_name);
            EditText et_pass = (EditText) findViewById(R.id.et_pass);
            
            final String name = et_name.getText().toString();
            final String pass = et_pass.getText().toString();
            String url = "http://192.168.1.117:8080/web2/servlet/LoginServlet";
            AsyncHttpClient ahc = new AsyncHttpClient();
            RequestParams params = new RequestParams();
            params.add("name", name);
            params.add("pass", pass);
            ahc.post(url, params, new MyResponseHandler());
        }
        
        class MyResponseHandler extends AsyncHttpResponseHandler{
            public void onSuccess(int statusCode, Header[] headers,
                    byte[] responseBody) {
                try {
                    Toast.makeText(MainActivity.this, new String(responseBody,"GBK"), 0).show();
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
            public void onFailure(int statusCode, Header[] headers,
                    byte[] responseBody, Throwable error) {
                Toast.makeText(MainActivity.this, "請求失敗", 0).show();
                
            }
            
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章