HttpUrlConnection与HttpClient的认识(三)-HttpClient的使用

上面的两章介绍了HttpUrlConnection的使用,HttpURLConnection是java的标准类,没有做一些封装,用起来不方便,本篇开始介绍HttpClient,HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等.

下面开始简单使用一下HttpClient:
准备工作:利用eclipse新建一个java项目,导入与httpclient相关的jar包,这些jar包,自己到网上可以下载到。我还是以访问百度首页为例子吧。
导入相关jar包:
这里写图片描述

1.简单使用HttpClient(GET方式)

代码:

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;


public class HttpClientTest1 {
    public static void main(String[] args) {
        String url = "http://www.baidu.com";
        String resp=null;
        InputStream inputStream=null;
        BufferedReader bufferedReader=null;
        // 创建httpClient实例.
        HttpClient httpclient = new HttpClient();
        // 创建httpPost实例.  
        GetMethod getMethod = new GetMethod(url);
        try {
            int statusCode = httpclient.executeMethod(getMethod);
            System.out.println(statusCode);
            if (statusCode==200) {
                //getResponseBodyAsString以字符串的方式读取
                resp = getMethod.getResponseBodyAsString();
                System.out.println("请求的内容,方式1:"+resp);

                //getResponseBodyAsStream以流的方式读取
                inputStream=getMethod.getResponseBodyAsStream();
                bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
                String str = null;
                StringBuffer strBuffer=new StringBuffer();
                while ((str = bufferedReader.readLine()) != null) {
                    strBuffer.append(str);
                    strBuffer.append("\r\n");
                } 
                System.out.println("请求的内容,方式2:"+strBuffer);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            getMethod.releaseConnection();
        }

    }

}

实验结果:

这里写图片描述

常用的获取服务器响应的内容的方式,一个是以字符串的形式获取(getResponseBodyAsString),一个是以流的形式(getResponseBodyAsStream),这里推荐用流的方式获取,避免引起中文乱码的问题。

2.简单使用HttpClient(POST方式)

我们还是按HttpUrlConnection与HttpClient的认识(一)中的使用的本地url:http://localhost:8080/test/index.jsp作为网络资源吧,这样可以传参数。

index.jsp修改如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String name = request.getParameter("name");
String age = request.getParameter("age");
String sex = request.getParameter("sex");
%> 
<title>Insert title here</title>
</head>
<body>
 我的用户名是:<%=name%><br>
 我的年龄是:<%=age%><br>
  我的性别是:<%=sex%><br>
</body>
</html>

POST方式代码:


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;


public class HttpClientTest2 {
    public static void main(String[] args) {
        String url = "http://localhost:8080/test/index.jsp";
        InputStream inputStream=null;
        BufferedReader bufferedReader=null;
        // 创建httpClient实例.   
        HttpClient httpclient = new HttpClient();
        // 创建httpPost实例.   
        PostMethod postMethod =new PostMethod(url);
        httpclient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
        //设置连接超时
        httpclient.getParams().setConnectionManagerTimeout(60000);
        //httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
        // 设置读数据超时时间(单位毫秒)  
        httpclient.getParams().setSoTimeout(60000);
        //httpclient.getHttpConnectionManager().getParams().setSoTimeout(60000)
        // 创建参数队列    
        List<NameValuePair[]> params = new ArrayList<NameValuePair[]>();
        NameValuePair[] nameValues={new NameValuePair("name","aaa"),new NameValuePair("age","20"),new NameValuePair("sex","male")};
        params.add(nameValues);
        for (NameValuePair[] p : params) {
            postMethod.addParameters(p);
        }
        try {
            int statusCode = httpclient.executeMethod(postMethod);
            System.out.println(statusCode);
            if (statusCode==200) {
                //getResponseBodyAsStream以流的方式读取
                inputStream=postMethod.getResponseBodyAsStream();
                bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"utf-8"));//设置编码,要不然jsp中的中文会乱码
                String str = null;
                StringBuffer strBuffer=new StringBuffer();
                while ((str = bufferedReader.readLine()) != null) {
                    strBuffer.append(str);
                    strBuffer.append("\r\n");
                } 
                System.out.println("请求的内容:"+strBuffer);

            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            postMethod.releaseConnection();
        }

    }

}

实验结果:

这里写图片描述

从上面的结果可以 看到,参数正确的发送给服务端了,总的来说,HttpClient的使用起来还是很简单的,需要注意POST方式中传参时,NameValuePair的使用

参数传递有两种方式:

  // 创建参数队列    
 NameValuePair[] nameValues={new NameValuePair("name","aaa"),new NameValuePair("age","10"),new NameValuePair("sex","male")};
  //======================设置参数方式一==================
 postMethod.addParameters(nameValues);

 //======================设置参数方式二==================
 postMethod.setRequestBody(nameValues);

 //======================设置参数方式三==================
    postMethod.setQueryString(nameValues);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值