欢迎使用CSDN-markdown编辑器

来源:互联网 发布:pack php 编辑:程序博客网 时间:2024/06/06 01:09

(此文章是从网络上摘抄)
一.使用 java 接口
1) 创建 URL 以及 URLConnection / HttpURLConnection 对象
2) 设置连接参数
3) 连接到服务器
4) 向服务器写数据
5) 从服务器读取数据
public class HttpUtils
{

private static final int TIMEOUT_IN_MILLIONS = 5000;public interface CallBack{    void onRequestComplete(String result);}/** * 异步的Get请求 * * @param urlStr * @param callBack */public static void doGetAsyn(final String urlStr, final CallBack callBack){    new Thread()    {        public void run()        {            try            {                String result = doGet(urlStr);                if (callBack != null)                {                    callBack.onRequestComplete(result);                }            } catch (Exception e)            {                e.printStackTrace();            }        };    }.start();}/** * 异步的Post请求 * @param urlStr * @param params * @param callBack * @throws Exception */public static void doPostAsyn(final String urlStr, final String params,                              final CallBack callBack) throws Exception{    new Thread()    {        public void run()        {            try            {                String result = doPost(urlStr, params);                if (callBack != null)                {                    callBack.onRequestComplete(result);                }            } catch (Exception e)            {                e.printStackTrace();            }        };    }.start();}/** * Get请求,获得返回数据 * * @param urlStr * @return * @throws Exception */public static String doGet(String urlStr){    URL url = null;    HttpURLConnection conn = null;    InputStream is = null;    ByteArrayOutputStream baos = null;    try    {        url = new URL(urlStr);        conn = (HttpURLConnection) url.openConnection();        conn.setReadTimeout(TIMEOUT_IN_MILLIONS);        conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);        conn.setRequestMethod("GET");        conn.setRequestProperty("accept", "*/*");        conn.setRequestProperty("connection", "Keep-Alive");        if (conn.getResponseCode() == 200)        {            is = conn.getInputStream();            baos = new ByteArrayOutputStream();            int len = -1;            byte[] buf = new byte[128];            while ((len = is.read(buf)) != -1)            {                baos.write(buf, 0, len);            }            baos.flush();            return baos.toString();        } else        {            throw new RuntimeException(" responseCode is not 200 ... ");        }    } catch (Exception e)    {        e.printStackTrace();    } finally    {        try        {            if (is != null)                is.close();        } catch (IOException e)        {        }        try        {            if (baos != null)                baos.close();        } catch (IOException e)        {        }        conn.disconnect();    }    return null ;}/** * 向指定 URL 发送POST方法的请求 * * @param url *            发送请求的 URL * @param param *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 * @throws Exception */public static String doPost(String url, String param){    PrintWriter out = null;    BufferedReader in = null;    String result = "";    try    {        URL realUrl = new URL(url);        // 打开和URL之间的连接        HttpURLConnection conn = (HttpURLConnection) realUrl                .openConnection();        // 设置通用的请求属性        conn.setRequestProperty("accept", "*/*");        conn.setRequestProperty("connection", "Keep-Alive");        conn.setRequestMethod("POST");        conn.setRequestProperty("Content-Type",                "application/x-www-form-urlencoded");        conn.setRequestProperty("charset", "utf-8");        conn.setUseCaches(false);        // 发送POST请求必须设置如下两行        conn.setDoOutput(true);        conn.setDoInput(true);        conn.setReadTimeout(TIMEOUT_IN_MILLIONS);        conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);        if (param != null && !param.trim().equals(""))        {            // 获取URLConnection对象对应的输出流            out = new PrintWriter(conn.getOutputStream());            // 发送请求参数            out.print(param);            // flush输出流的缓冲            out.flush();        }        // 定义BufferedReader输入流来读取URL的响应        in = new BufferedReader(                new InputStreamReader(conn.getInputStream()));        String line;        while ((line = in.readLine()) != null)        {            result += line;        }    } catch (Exception e)    {        e.printStackTrace();    }    // 使用finally块来关闭输出流、输入流    finally    {        try        {            if (out != null)            {                out.close();            }            if (in != null)            {                in.close();            }        } catch (IOException ex)        {            ex.printStackTrace();        }    }    return result;}

}
二.使用 apache 接口

1) 创建 HttpClient 以及 GetMethod / PostMethod, HttpRequest等对象;
2) 设置连接参数;
3) 执行 HTTP 操作;
4) 处理服务器返回结果.
public class HttpUtil {
public static String get(String uri){
BufferedReader reader = null;
StringBuffer sb = null;
String result = “”;
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(uri);
try {
//发送请求,得到响应
HttpResponse response = client.execute(request);

        //请求成功        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){            reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));            sb = new StringBuffer();            String line = "";            String NL = System.getProperty("line.separator");            while((line = reader.readLine()) != null){                sb.append(line);            }        }    } catch (ClientProtocolException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }    finally{        try {            if (null != reader){                reader.close();                reader = null;            }        } catch (IOException e) {            e.printStackTrace();        }    }    if (null != sb){        result =  sb.toString();    }    return result;}/** * 以post方式发送请求,访问web * @param uri web地址 * @return 响应数据 */public static String post(String uri,Map< String , String > params){    BufferedReader reader = null;    StringBuffer sb = null;    String result = "";    HttpClient client = new DefaultHttpClient();    HttpPost request = new HttpPost(uri);    List<NameValuePair> nvps = new ArrayList <NameValuePair>();    Set<String> keySet = params.keySet();    for(String key : keySet) {        nvps.add(new BasicNameValuePair(key, params.get(key)));    }    //保存要传递的参数    // List<NameValuePair> params = new ArrayList<NameValuePair>();    //添加参数    //params.add(new BasicNameValuePair("parameter","以Post方式发送请求"));    try {        //设置字符集        HttpEntity entity = new UrlEncodedFormEntity(nvps,"utf-8");        //请求对象        request.setEntity(entity);        //发送请求        HttpResponse response = client.execute(request);        //请求成功        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){            System.out.println("post success");            reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));            sb = new StringBuffer();            String line = "";            String NL = System.getProperty("line.separator");            while((line = reader.readLine()) != null){                sb.append(line);            }        }    } catch (ClientProtocolException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }    finally{        try {            //关闭流            if (null != reader){                reader.close();                reader = null;            }        } catch (IOException e) {            e.printStackTrace();        }    }    if (null != sb){        result =  sb.toString();    }    return result;}

}

0 0
原创粉丝点击