zoukankan      html  css  js  c++  java
  • httpURLConnection、URL、httpClient、httpPost、httpGet

    参考:http://blog.csdn.net/qxs965266509/article/details/9072483

    package com.example.lesson09_login;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.ProtocolException;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    @SuppressLint("HandlerLeak")
    public class MainActivity extends Activity {
    
        public Button btn_get, btn_post;
        public EditText et_name, et_pass;
        public NetWorkUtil netWorkUtil;
        public Handler handler;
        public static final int GET = 1;
        public static final int POST = 2;
        public String name, pass, content;
        public String path = "http://172.22.64.18:8080/lesson09_login/csdn/UserAction_login.action";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            btn_get = (Button) findViewById(R.id.btn_get);
            btn_post = (Button) findViewById(R.id.btn_post);
    
            et_name = (EditText) findViewById(R.id.et_name);
            et_pass = (EditText) findViewById(R.id.et_pass);
    
            netWorkUtil = new NetWorkUtil(this);
    
            handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
                    switch (msg.what) {
                    case GET:
                        Toast.makeText(MainActivity.this, "GET请求成功++++++++++",
                                Toast.LENGTH_LONG).show();
                        Log.v("MainActity", content);
                        break;
                    case POST:
                        Toast.makeText(MainActivity.this, "POST请求成功----------",
                                Toast.LENGTH_LONG).show();
                        Log.v("MainActity", content);
                        break;
    
                    default:
                        break;
                    }
                }
            };
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        public void sendGet(View v) {
            if (!isEmpty()) {
                Toast.makeText(MainActivity.this, "用户名或密码不能为空...",
                        Toast.LENGTH_LONG).show();
            } else {
                boolean flag = netWorkUtil.setNetWork();
                if (flag) {
                    new Thread(new Runnable() {
    
                        @Override
                        public void run() {
                            name = et_name.getText().toString();
                            pass = et_pass.getText().toString();
                            // sendGetRequest(path, name, pass);
                            sendGetClient(path, name, pass);
                            handler.sendEmptyMessage(GET);
                        }
    
                    }).start();
                }
            }
        }
    
        public void sendPost(View v) {
            if (!isEmpty()) {
                Toast.makeText(MainActivity.this, "用户名或密码不能为空...",
                        Toast.LENGTH_LONG).show();
            } else {
                boolean flag = netWorkUtil.setNetWork();
                if (flag) {
                    new Thread(new Runnable() {
    
                        @Override
                        public void run() {
                            name = et_name.getText().toString();
                            pass = et_pass.getText().toString();
                            // sendPostRequest(path, name, pass);
                            sendPostClient(path, name, pass);
                            handler.sendEmptyMessage(POST);
                        }
    
                    }).start();
                }
            }
        }
    
        public boolean isEmpty() {
            boolean flag = false;
            if (TextUtils.isEmpty(et_name.getText().toString())
                    || TextUtils.isEmpty(et_pass.getText().toString())) {
                flag = false;
            } else {
                flag = true;
            }
            return flag;
        }
    
        @SuppressWarnings("unused")
        private void sendGetRequest(String path, String name, String pass) {
            String str = path + "?user.name=" + name + "&user.pass=" + pass;
            try {
                URL url = new URL(str);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url
                        .openConnection();
                httpURLConnection.setConnectTimeout(5000);
                httpURLConnection.setRequestMethod("GET");
                if (httpURLConnection.getResponseCode() == 200) {
                    InputStream is = httpURLConnection.getInputStream();
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] buf = new byte[1024];
                    int len = 0;
                    while ((len = is.read(buf)) != -1) {
                        bos.write(buf, 0, len);
                    }
                    byte[] data = bos.toByteArray();
                    bos.flush();
                    bos.close();
                    is.close();
                    content = new String(data);
                    if (content.contains("gb2312")) {
                        content = new String(data, "gb2312");
                    }
                }
                httpURLConnection.disconnect();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @SuppressWarnings("unused")
        private void sendPostRequest(String path, String name, String pass) {
    
            try {
                String data = "user.name=" + name + "&user.pass=" + pass;
                URL url = new URL(path);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url
                        .openConnection();
                httpURLConnection.setConnectTimeout(5000);
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setRequestProperty("Content-Type",
                        "application/x-www-form-urlencoded");
                httpURLConnection.setRequestProperty("Content-Length",
                        data.length() + "");
                OutputStream os = httpURLConnection.getOutputStream();
                byte[] buf = data.getBytes();
                os.write(buf);
                os.flush();
                os.close();
                if (httpURLConnection.getResponseCode() == 200) {
                    InputStream is = httpURLConnection.getInputStream();
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] buf1 = new byte[1024];
                    int len = 0;
                    while ((len = is.read(buf1)) != -1) {
                        bos.write(buf1, 0, len);
                    }
                    byte[] data1 = bos.toByteArray();
                    bos.flush();
                    bos.close();
                    is.close();
                    content = new String(data1);
                }
                httpURLConnection.disconnect();
    
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        public void sendGetClient(String path, String name, String pass) {
            try {
                String uri = path + "?user.name="
                        + URLEncoder.encode(name, "UTF-8") + "&user.pass="
                        + URLEncoder.encode(pass, "UTF-8");
                HttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(uri);
    
                HttpResponse httpResponse = httpClient.execute(httpGet);
                if (httpResponse.getStatusLine().getStatusCode() == 200) {
                    InputStream is = httpResponse.getEntity().getContent();
                    content = StringTool.isContent(is);
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @SuppressWarnings("unused")
        public void sendPostClient(String path, String name, String pass) {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(path);
            List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
            parameters.add(new BasicNameValuePair("user.name", name));
            parameters.add(new BasicNameValuePair("user.pass", pass));
            UrlEncodedFormEntity entity = null;
            try {
                entity = new UrlEncodedFormEntity(parameters, "UTF-8");
           httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));   HttpResponse httpResponse
    = httpClient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == 200) { InputStream is = httpResponse.getEntity().getContent(); content = StringTool.isContent(is); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

     httpClient建立过程

      • 创建HttpClient对象。
      • 如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
      • 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
      • 调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse。
      • 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

    httpClient 与 httpUrlConnect区别

    在一般情况下,如果只是需要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection完全可以胜任。但在绝大部分情况下,Web站点的网页可能没这么简单,这些页面并不是通过一个简单的URL就可访问的,可能需要用户登录而且具有相应的权限才可访问该页面。在这种情况下,就需要涉及Session、Cookie的处理了,如果打算使用HttpURLConnection来处理这些细节,当然也是可能实现的,只是处理起来难度就大了。

           为了更好地处理向Web站点请求,包括处理Session、Cookie等细节问题,Apache开源组织提供了一个HttpClient项目,看它的名称就知道,它是一个简单的HTTP客户端(并不是浏览器),可以用于发送HTTP请求,接收HTTP响应。但不会缓存服务器的响应,不能执行HTML页面中嵌入的Javascript代码;也不会对页面内容进行任何解析、处理。

           简单来说,HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收
    响应,以及管理HTTP连接。
  • 相关阅读:
    day11
    day10
    day9
    day8
    day7
    day6
    day14
    day13
    day12
    day11
  • 原文地址:https://www.cnblogs.com/wjw334/p/3619513.html
Copyright © 2011-2022 走看看