HttpClient工具基本使用

  1. 如果要使用HttpClient开发包,需要将此开发包配置到项目的build path中

在这里插入图片描述

  1. 实现一个GET请求
  • 原Servlet程序类
package shu.mao.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("*************"+req.getParameter("name"));
		//服务端处理用户请求,并打印出请求参数
			resp.getWriter().println("name = "+req.getParameter("name"));
	}
}

  • 该程序类在浏览器中的访问路径
http://localhost:8080/HelloProject/HelloServlet?name=Hello
  • 定义一个TestGetDemo程序类访问get请求
package shu.xie.demo;

import java.io.IOException;

import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;

public class TestGetDemo {
	public static void main(String[] args) throws Exception{
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//定义请求路径
		String url ="http://localhost:8080/HelloProject/HelloServlet?name=Hello";
		//创建一个get请求
		HttpGet httpGet = new HttpGet(url);
		//执行get请求之后得到一个回应对象
		CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
		//控制台输出服务端回应的内容
		System.out.println(httpResponse.getEntity());
		//输出当前状态数字代码(200表示请求成功)
		System.out.println(httpResponse.getStatusLine().getStatusCode());
		//输出回应内容
		System.out.println(EntityUtils.toString(httpResponse.getEntity()));
	}
}

  • 控制台输出结果(TestGetDemo类)

在这里插入图片描述

  • Tomcat控制台输出结果

在这里插入图片描述
4. 使用HttpClient发送一个post请求

  • 在HelloServlet程序类中追加一个doPost()方法
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("####### POST请求处理"+req.getParameter("msg"));
		//服务端处理用户请求,并打印出请求参数
		resp.getWriter().println("msg = "+req.getParameter("msg"));
	}
  • 这里接收一个名为"msg"的提交参数,参数我们在设置请求路径的时候,并不直接把参数写在路径之中,而是通过HttpClient定义的UrlEncodedEntity来添加请求参数,具体操作如下
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("param1", "value1"));
formparams.add(new BasicNameValuePair("param2", "value2"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
HttpPost httppost = new HttpPost("http://localhost/handler.do");
httppost.setEntity(entity)
  • 以上的操作,会将使用指定的编码生成以下内容
param1=value1&param2=value
  • 于是我们可以通过以上的方法,在要进行访问的普通java类中进行添加提交参数,从而向HTML表单一样定义提交参数
  • 定义TestPostDemo程序类
package shu.xie.demo;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.Consts;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;

public class TestPostDemo {
	public static void main(String[] args) throws Exception{
		CloseableHttpClient httpClient = HttpClients.createDefault();
		//定义请求路径
		String url ="http://localhost:8080/HelloProject/HelloServlet";
		//创建一个post请求
		HttpPost httpPost = new HttpPost(url);
		//将请求参数进行封装
		List<NameValuePair> parames = new ArrayList<NameValuePair>();
		parames.add(new BasicNameValuePair("msg","你好世界"));
		parames.add(new BasicNameValuePair("name","Xiemaoshu"));
		UrlEncodedFormEntity  entity = new UrlEncodedFormEntity(parames,Consts.UTF_8);
		httpPost.setEntity(entity);
		//执行post请求之后得到一个回应对象
		CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
		//控制台输出服务端回应的内容
		System.out.println(httpResponse.getEntity());
		//输出当前状态数字代码(200表示请求成功)
		System.out.println(httpResponse.getStatusLine().getStatusCode());
		//输出回应内容
		InputStream input = httpResponse.getEntity().getContent();
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		byte[] data = new byte[1024];
		int x = 0;
		while((x=input.read(data)) != -1){
			bos.write(data,0,x);
		}
		System.out.println(new String(bos.toByteArray()));
	}
}

  • 因为提交参数有设置中文,所以Servlet类上要设置request和response编码格式
  • 控制台输出结果(TestPostDemo类)

在这里插入图片描述

  • Tomcat控制台输出结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43386754/article/details/85058082