Http网络请求

来源:互联网 发布:linux系统界面 编辑:程序博客网 时间:2024/05/16 06:03

get是从服务器上获取数据,post是向服务器传送数据
get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
get安全性非常低,post安全性较高。但是执行效率却比Post方法好。 
get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

HTTP GET请求

package com.zhidi.httpget;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private EditText et_username;private EditText et_password;private Button bt_show;String result="";/**get请求URL地址*/private static final String URL="";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                init();                bt_show.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//android4.0后的新的特性,网络数据请求时不能放在主线程中。//7、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。final Handler handler = new Handler() {                    @Override                      public void handleMessage(Message msg) {                          if (msg.what == 1) {                        //8、提示读取结果                    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();                        }                      }                  };                // 启动线程来执行任务                  new Thread() {                      public void run() {                    //请求网络                    loginByGet(et_username.getText().toString(), et_password.getText().toString());                         Message m = new Message();                          m.what = 1;                          // 发送消息到Handler                          handler.sendMessage(m);                      }                  }.start();                }});            }        private void init(){    et_username=(EditText)findViewById(R.id.et_username);    et_password=(EditText)findViewById(R.id.et_password);    bt_show=(Button)findViewById(R.id.bt_login);    }        /**     * 请求后台,判断登录结果。     * @param username     * @param password     */    public void loginByGet(String username, String password) {          try {              //1、设置请求的地址。通过URLEncoder.encode(String s,"UTF-8")将字符串转换为UTF-8编码            String strUrl = URL                      +"?username=" + URLEncoder.encode(username, "UTF-8")                     + "&password=" + URLEncoder.encode(password, "UTF-8");             //2、根据地址创建URL对象(网络访问的url)              URL url = new URL(strUrl);              //3、url.openConnection()打开网络链接              HttpURLConnection conn = (HttpURLConnection)url.openConnection();              //4、获取响应的输入流对象            InputStreamReader is = new InputStreamReader(conn.getInputStream());            BufferedReader bufferedReader = new BufferedReader(is);            StringBuffer strBuffer = new StringBuffer();            String line = null;            //5、读取服务器返回信息            while ((line = bufferedReader.readLine()) != null) {                strBuffer.append(line);            }            result = strBuffer.toString();    //6、关闭InputStream、关闭http连接    is.close();    conn.disconnect();            } catch (Exception e) {              e.printStackTrace();          }      }     }

HTTP POST请求

package com.zhidi.httppost;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity {private EditText et_username;private EditText et_password;private Button bt_show;String result="";/**post请求URL地址*/private static final String URL="";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                init();                bt_show.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//android4.0后的新的特性,网络数据请求时不能放在主线程中。//9、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。final Handler handler = new Handler() {                    @Override                      public void handleMessage(Message msg) {                          if (msg.what == 1) {                        //8、提示读取结果                    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();                        }                      }                  };                // 启动线程来执行任务                  new Thread() {                      public void run() {                    //请求网络                    loginByPost(et_username.getText().toString(), et_password.getText().toString());                         Message m = new Message();                          m.what = 1;                          // 发送消息到Handler                          handler.sendMessage(m);                      }                  }.start();                }});            }        private void init(){    et_username=(EditText)findViewById(R.id.et_username);    et_password=(EditText)findViewById(R.id.et_password);    bt_show=(Button)findViewById(R.id.bt_login);    }        /**     * 请求后台,判断登录结果。     * @param username     * @param password     */    public void loginByPost(String username, String password) {          try {             //1、根据地址创建URL对象(网络访问的url)              URL url = new URL(URL);              //2、url.openConnection()打开网络链接              HttpURLConnection conn = (HttpURLConnection)url.openConnection();              //3、设置请求的方式              conn.setRequestMethod("POST");             conn.setDoInput(true);//发送POST请求必须设置允许输出            conn.setDoOutput(true);//发送POST请求必须设置允许输入            //4、设置请求的头            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");            conn.setRequestProperty("Charset", "utf-8");            String data = "username=" + URLEncoder.encode(username, "UTF-8")                      + "&password=" + URLEncoder.encode(password, "UTF-8");//传递的数据            conn.setRequestProperty("Content-Length",String.valueOf(data.getBytes().length));             //5、获取输出流             OutputStream os = conn.getOutputStream();              os.write(data.getBytes());              os.flush();                                     //6、获取响应的输入流对象            InputStreamReader is = new InputStreamReader(conn.getInputStream());            BufferedReader bufferedReader = new BufferedReader(is);            StringBuffer strBuffer = new StringBuffer();            String line = null;            //7、读取服务器返回信息            while ((line = bufferedReader.readLine()) != null) {                strBuffer.append(line);            }            result = strBuffer.toString();    //8、关闭InputStream、关闭http连接    is.close();    conn.disconnect();            } catch (Exception e) {              e.printStackTrace();          }      }    }

HttpClientGet请求

package com.zhidi.httpclientget;import java.net.URLEncoder;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;/** * HttpClient get * @author Administrator */public class MainActivity extends Activity {private EditText et_username;private EditText et_password;private Button bt_show;String result="";/**get请求URL地址*/private static final String URL="";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                init();                bt_show.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//android4.0后的新的特性,网络数据请求时不能放在主线程中。//7、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。final Handler handler = new Handler() {                    @Override                      public void handleMessage(Message msg) {                          if (msg.what == 1) {                        //8、提示读取结果                    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();                        }                      }                  };                // 启动线程来执行任务                  new Thread() {                      public void run() {                    //请求网络                    loginByHttpClientGet(et_username.getText().toString(), et_password.getText().toString());                         Message m = new Message();                          m.what = 1;                          // 发送消息到Handler                          handler.sendMessage(m);                      }                  }.start();                }});            }        private void init(){    et_username=(EditText)findViewById(R.id.et_username);    et_password=(EditText)findViewById(R.id.et_password);    bt_show=(Button)findViewById(R.id.bt_login);    }        /**     * 请求后台,判断登录结果。     * @param username     * @param password     */    public void loginByHttpClientGet(String username,String password) {    //1、创建 HttpClient的实例         HttpClient httpClient = new DefaultHttpClient();        try {             //2、创建某种连接方法的实例,在这里是HttpGet。         String strUrl = URL                      +"?username=" + URLEncoder.encode(username, "UTF-8")                     + "&password=" + URLEncoder.encode(password, "UTF-8");             HttpGet httpGet = new HttpGet(strUrl);                        //3、获取HttpResponse实例            HttpResponse httpResp = httpClient.execute(httpGet);            //4、判断是否能够请求成功            if(httpResp.getStatusLine().getStatusCode()==200){                      //5、获取返回的数据            result = EntityUtils.toString(httpResp.getEntity(),"UTF-8");            } else {            Log.i("HttpClientGet", "HttpGet方式请求失败");            }        } catch (Exception e) {              e.printStackTrace();         }finally {            // 6、释放连接。无论执行方法是否成功,都必须释放连接          httpClient.getConnectionManager().shutdown();//释放链接          }           }   }


HttpClientPost请求

package com.zhidi.httpclientpost;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;/** * HttpClient post * @author Administrator */public class MainActivity extends Activity {private EditText et_username;private EditText et_password;private Button bt_show;String result="";/**post请求URL地址*/private static final String URL="";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                init();                bt_show.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//android4.0后的新的特性,网络数据请求时不能放在主线程中。//8、使用线程执行访问服务器,获取返回信息后通知主线程更新UI或者提示信息。final Handler handler = new Handler() {                    @Override                    public void handleMessage(Message msg) {                          if (msg.what == 1) {                        //9、提示读取结果                    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();                        }                      }                  };                // 启动线程来执行任务                  new Thread() {                      public void run() {                    //请求网络                    loginByHttpClientPost(et_username.getText().toString(), et_password.getText().toString());                         Message m = new Message();                          m.what = 1;                          // 发送消息到Handler                          handler.sendMessage(m);                      }                  }.start();                }});            }        private void init(){    et_username=(EditText)findViewById(R.id.et_username);    et_password=(EditText)findViewById(R.id.et_password);    bt_show=(Button)findViewById(R.id.bt_login);    }        /**     * 请求后台,判断登录结果。     * @param username     * @param password     */    public void loginByHttpClientPost(String username,String password) {    //1.创建 HttpClient的实例          HttpClient httpClient = new DefaultHttpClient();        try {        //2、创建某种连接方法的实例,在这里是HttpPost。        HttpPost httpPost = new HttpPost(URL);              //3、封装传递参数的集合              List<NameValuePair> parameters = new ArrayList<NameValuePair>();              parameters.add(new BasicNameValuePair("username", username));//往这个集合中添加你要传递的参数              parameters.add(new BasicNameValuePair("password", password));            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");//创建传递参数封装 实体对象,设置传递参数的编码              httpPost.setEntity(entity);//把实体对象存入到httpPost对象中             //4、调用HttpClient实例的execute方法来执行创建好的method实例            HttpResponse httpResp = httpClient.execute(httpPost);            //5、判断是否能够请求成功            if(httpResp.getStatusLine().getStatusCode()==200){            //6、获取返回的数据            result = EntityUtils.toString(httpResp.getEntity(),"UTF-8");            } else {            Log.i("HttpClientPost", "HttpPost方式请求失败");            }        }catch (Exception e) {              e.printStackTrace();         }finally {            // 7、释放连接。无论执行方法是否成功,都必须释放连接              httpClient.getConnectionManager().shutdown();//释放链接          }        }    }

0 0
原创粉丝点击