get post请求的几种方法

来源:互联网 发布:手机拍照识字软件 编辑:程序博客网 时间:2024/05/21 02:33
1:第一种方法,使用httpurlconnectiong
public void click1(View v) {//get请求new Thread(){public void run() {try {//[2]获取用户名和密码 String name = et_username.getText().toString().trim();String pwd = et_password.getText().toString().trim();//[2.1]定义get方式要提交的路径    小细节 如果提交中文要对name 和 pwd 进行一个urlencode 编码 String path = "http://192.168.11.73:8080/login/LoginServlet?username="+URLEncoder.encode(name, "utf-8")+"&password="+URLEncoder.encode(pwd, "utf-8")+"";//(1) 创建一个url对象 参数就是网址 URL url = new URL(path);//(2)获取HttpURLConnection 链接对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();//(3)设置参数  发送get请求conn.setRequestMethod("GET"); //默认请求 就是get  要大写//(4)设置链接网络的超时时间 conn.setConnectTimeout(5000);//(5)获取服务器返回的状态码 int code = conn.getResponseCode(); //200  代表获取服务器资源全部成功  206请求部分资源    if (code == 200) {//(6)获取服务器返回的数据  以流的形式返回   InputStream inputStream = conn.getInputStream();//(6.1)把inputstream 转换成 string String content = StreamTools.readStream(inputStream);//(7)把服务器返回的数据展示到Toast上  不能在子线程展示toastshowToast(content);}} catch (Exception e) {e.printStackTrace();}};}.start();}

// [1]点击按钮 进行post方式提交数据public void click2(View v) {new Thread(){public void run() {try {//[2]获取用户名和密码 String name = et_username.getText().toString().trim();String pwd = et_password.getText().toString().trim();//[2.1]定义get方式要提交的路径 String data = "username="+URLEncoder.encode(name, "utf-8")+"&password="+URLEncoder.encode(pwd,"utf-8")+""; //请求体的内容// 一 ☆☆☆☆☆☆☆和get方式提交数据 区别 路径不同String path = "http://192.168.11.73:8080/login/LoginServlet";//(1) 创建一个url对象 参数就是网址 URL url = new URL(path);//(2)获取HttpURLConnection 链接对象HttpURLConnection conn = (HttpURLConnection) url.openConnection();//(3)设置参数  发送get请求    //二 ☆☆☆☆☆☆☆和get方式提交数据 区别  设置请求方式是postconn.setRequestMethod("POST"); //默认请求 就是get  要大写//(4)设置链接网络的超时时间 conn.setConnectTimeout(5000);//三  ☆☆☆☆☆☆☆和get方式提交数据 区别 要多设置2个请求头信息 //设置头信息conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length", data.length()+"");//四 ☆☆☆☆☆☆☆ 把我们组拼好的数据提交给服务器  以流的形式提交 conn.setDoOutput(true);// 设置一个标记 允许输出 conn.getOutputStream().write(data.getBytes());//(5)获取服务器返回的状态码 int code = conn.getResponseCode(); //200  代表获取服务器资源全部成功  206请求部分资源    if (code == 200) {//(6)获取服务器返回的数据  以流的形式返回   InputStream inputStream = conn.getInputStream();//(6.1)把inputstream 转换成 string String content = StreamTools.readStream(inputStream);//(7)把服务器返回的数据展示到Toast上  不能在子线程展示toastshowToast(content);}} catch (Exception e) {e.printStackTrace();}};}.start();}
第二种方法:使用httpclient
// 点击按钮 进行get方式提交数据public void click1(View v) {new Thread(){public void run() {try {String name = et_username.getText().toString().trim();String pwd = et_password.getText().toString().trim();//[2.1]定义get方式要提交的路径    小细节 如果提交中文要对name 和 pwd 进行一个urlencode 编码 String path = "http://192.168.11.73:8080/login/LoginServlet?username="+URLEncoder.encode(name, "utf-8")+"&password="+URLEncoder.encode(pwd, "utf-8")+"";//[3]获取httpclient实例 DefaultHttpClient client = new DefaultHttpClient();//[3.1]准备get请求 定义 一个httpget实现 HttpGet get = new HttpGet(path);//[3.2]执行一个get请求  HttpResponse response = client.execute(get);//[4]获取服务器返回的状态码int code = response.getStatusLine().getStatusCode();if (code == 200) {//[5]获取服务器返回的数据   以流的形式返回 InputStream inputStream = response.getEntity().getContent();//[6]把流转换成字符串    String content = StreamTools.readStream(inputStream);    //[7]展示结果showToast(content);}} catch (Exception e) {e.printStackTrace();}};}.start();}
// [1]点击按钮 进行post方式提交数据public void click2(View v) {new Thread(){public void run() {try {//[2]获取用户名和密码 String name = et_username.getText().toString().trim();String pwd = et_password.getText().toString().trim();String path = "http://192.168.11.73:8080/login/LoginServlet";//[3]以httpClient 方式进行post 提交 DefaultHttpClient client = new DefaultHttpClient();//[3.1]准备post 请求 HttpPost post = new HttpPost(path);//[3.1.0]准备parameters List<NameValuePair> lists = new ArrayList<NameValuePair>();//[3.1.1]准备 NameValuePair 实际上就是我们要提交的用户名 和密码  key是服务器key :usernameBasicNameValuePair nameValuePair = new BasicNameValuePair("username",name);BasicNameValuePair pwdValuePair = new BasicNameValuePair("password",pwd);//[3.1.3] 把nameValuePair  和 pwdValuePair  加入到集合中lists.add(nameValuePair);lists.add(pwdValuePair);//[3.1.3]准备entityUrlEncodedFormEntity entity = new UrlEncodedFormEntity(lists);//[3.2]准备post方式提交的正文   以实体形式准备 (键值对形式 )post.setEntity(entity);HttpResponse response = client.execute(post);//[4]获取服务器返回的状态码int code = response.getStatusLine().getStatusCode();if (code == 200) {//[5]获取服务器返回的数据   以流的形式返回 InputStream inputStream = response.getEntity().getContent();//[6]把流转换成字符串    String content = StreamTools.readStream(inputStream);        //[7]展示结果showToast(content);}} catch (Exception e) {e.printStackTrace();}};}.start();}
3:使用开源项目asynchttpclient
// 点击按钮 进行get方式提交数据public void click1(View v) {String name = et_username.getText().toString().trim();String pwd = et_password.getText().toString().trim();//[2.1]定义get方式要提交的路径    小细节 如果提交中文要对name 和 pwd 进行一个urlencode 编码    try {path = "http://192.168.11.73:8080/login/LoginServlet?username="+URLEncoder.encode(name, "utf-8")+"&password="+URLEncoder.encode(pwd, "utf-8")+"";} catch (UnsupportedEncodingException e) {e.printStackTrace();}    //[3]使用开源项目进行get请求     //[3.1]创建asynchttpclient     AsyncHttpClient client  = new AsyncHttpClient();    //[3.2]进行get 请求     client.get(path, new AsyncHttpResponseHandler() {//请求成功的回调方法@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {Toast.makeText(getApplicationContext(), new String(responseBody,"gbk"), 1).show();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}//请求失败@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {}});            }// [1]点击按钮 进行post方式提交数据public void click2(View v) {//[2]获取用户名和密码 String name = et_username.getText().toString().trim();String pwd = et_password.getText().toString().trim();String path = "http://192.168.11.73:8080/login/LoginServlet";//[3.1]创建asynchttpclient     AsyncHttpClient client  = new AsyncHttpClient();        //[3.1.0]准备请求体的内容    RequestParams params = new RequestParams();    params.put("username", name);    params.put("password", pwd);    //[3.2]进行post请求 params 请求的参数封装     client.post(path, params, new AsyncHttpResponseHandler() {//请求成功     登录成功@Overridepublic void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {Toast.makeText(getApplicationContext(), new String(responseBody,"gbk"), 1).show();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}@Overridepublic void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) {}});}
总结:大多数情况下用开源项目,在需要改变头文件时用httpurlconnection,httpclient了解.
 
原创粉丝点击