java语言 百分网手机站

java如何利用java.net.URLConnection发送HTTP

时间:2020-08-17 16:46:39 java语言 我要投稿

java如何利用java.net.URLConnection发送HTTP请求

  如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求。下面是由百分网小编为大家整理的java如何利用java.net.URLConnection发送HTTP请求,喜欢的.可以收藏一下!了解更多详情资讯,请关注应届毕业生考试网!

  运用原生Java Api发送简单的Get请求、Post请求步骤

  1.通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)

  2.设置请求的参数

  3.发送请求

  4.以输入流的形式获取返回内容

  5.关闭输入流

  发送请求与接收响应流类 HttpRequestor

  package me.http;

  import java.io.BufferedReader;

  import java.io.IOException;

  import java.io.InputStream;

  import java.io.InputStreamReader;

  import java.io.OutputStream;

  import java.io.OutputStreamWriter;

  import java.net.HttpURLConnection;

  import java.net.InetSocketAddress;

  import java.net.Proxy;

  import java.net.URL;

  import java.net.URLConnection;

  import java.util.Iterator;

  import java.util.Map;

  public class HttpRequestor {

  private String charset = "utf-8";

  private Integer connectTimeout = null;

  private Integer socketTimeout = null;

  private String proxyHost = null;

  private Integer proxyPort = null;

  /**

  * Do GET request

  * @param url

  * @return

  * @throws Exception

  * @throws IOException

  */

  public String doGet(String url) throws Exception {URL localURL = new URL(url);

  URLConnection connection = this.openConnection(localURL);HttpURLConnection httpURLConnection = (HttpURLConnection)connection;httpURLConnection.setRequestProperty("Accept-Charset", charset);httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");InputStream inputStream = null;

  InputStreamReader inputStreamReader = null;BufferedReader reader = null;

  StringBuffer resultBuffer = new StringBuffer();String tempLine = null;

  //响应失败

  if (httpURLConnection.getResponseCode() >= 300) {throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());}

  try {

  inputStream = httpURLConnection.getInputStream();inputStreamReader = new InputStreamReader(inputStream);reader = new BufferedReader(inputStreamReader);while ((tempLine = reader.readLine()) != null) {resultBuffer.append(tempLine);

  }

  } finally {

  if (reader != null) {

  reader.close();

  }

  if (inputStreamReader != null) {

  inputStreamReader.close();

  }

  if (inputStream != null) {

  inputStream.close();

  }

  }

  return resultBuffer.toString();

  }

  /**

  * Do POST request

  * @param url

  * @param parameterMap

  * @return

  * @throws Exception

  */

  public String doPost(String url, Map parameterMap) throws Exception {/* Translate parameter map to parameter date string */StringBuffer parameterBuffer = new StringBuffer();if (parameterMap != null) {

  Iterator iterator = parameterMap.keySet().iterator();String key = null;

  String value = null;

  while (iterator.hasNext()) {

  key = (String)iterator.next();

  if (parameterMap.get(key) != null) {

  value = (String)parameterMap.get(key);

  } else {

  value = "";

  }

  parameterBuffer.append(key).append("=").append(value);if (iterator.hasNext()) {

  parameterBuffer.append("&");

  }

  }

  }

  System.out.println("POST parameter : " + parameterBuffer.toString());URL localURL = new URL(url);

  URLConnection connection = this.openConnection(localURL);HttpURLConnection httpURLConnection = (HttpURLConnection)connection;httpURLConnection.setDoOutput(true);

  httpURLConnection.setRequestMethod("POST");httpURLConnection.setRequestProperty("Accept-Charset", charset);httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");httpURLConnection.setRequestProperty("Content-Length", String.valueOf(parameterBuffer.length()));OutputStream outputStream = null;

  OutputStreamWriter outputStreamWriter = null;InputStream inputStream = null;

  InputStreamReader inputStreamReader = null;BufferedReader reader = null;

  StringBuffer resultBuffer = new StringBuffer();String tempLine = null;

  try {

  outputStream = httpURLConnection.getOutputStream();outputStreamWriter = new OutputStreamWriter(outputStream);outputStreamWriter.write(parameterBuffer.toString());outputStreamWriter.flush();

  //响应失败

  if (httpURLConnection.getResponseCode() >= 300) {throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());}

  //接收响应流

  inputStream = httpURLConnection.getInputStream();inputStreamReader = new InputStreamReader(inputStream);reader = new BufferedReader(inputStreamReader);while ((tempLine = reader.readLine()) != null) {resultBuffer.append(tempLine);

  }

  } finally {

  if (outputStreamWriter != null) {

  outputStreamWriter.close();

  }

  if (outputStream != null) {

  outputStream.close();

  }

  if (reader != null) {

  reader.close();

  }

  if (inputStreamReader != null) {

  inputStreamReader.close();

  }

  if (inputStream != null) {

  inputStream.close();

  }

  }

  return resultBuffer.toString();

  }

  private URLConnection openConnection(URL localURL) throws IOException {URLConnection connection;

  if (proxyHost != null && proxyPort != null) {Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));connection = localURL.openConnection(proxy);} else {

  connection = localURL.openConnection();

  }

  return connection;

  }

  /**

  * Render request according setting

  * @param request

  */

  private void renderRequest(URLConnection connection) {if (connectTimeout != null) {

  connection.setConnectTimeout(connectTimeout);}

  if (socketTimeout != null) {

  connection.setReadTimeout(socketTimeout);}

  }

  /*

  * Getter & Setter

  */

  public Integer getConnectTimeout() {

  return connectTimeout;

  }

  public void setConnectTimeout(Integer connectTimeout) {this.connectTimeout = connectTimeout;

  }

  public Integer getSocketTimeout() {

  return socketTimeout;

  }

  public void setSocketTimeout(Integer socketTimeout) {this.socketTimeout = socketTimeout;

  }

  public String getProxyHost() {

  return proxyHost;

  }

  public void setProxyHost(String proxyHost) {this.proxyHost = proxyHost;

  }

  public Integer getProxyPort() {

  return proxyPort;

  }

  public void setProxyPort(Integer proxyPort) {this.proxyPort = proxyPort;

  }

  public String getCharset() {

  return charset;

  }

  public void setCharset(String charset) {

  this.charset = charset;

  }

  }

  为测试方便,新建一个项目,并新建一个Servlet,接收post请求并对HttpRequestor请求响应,发出响应流:此处使用了

  注解: @WebServlet("/LoginServlet") ,也可以在web.xml配置Servletpackage me.loginServlet;

  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;/**

  * Servlet implementation class LoginServlet*/

  @WebServlet("/LoginServlet")

  public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;/**

  * @see HttpServlet#HttpServlet()

  */

  public LoginServlet() {

  super();

  // TODO Auto-generated constructor stub

  }

  /**

  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

  System.out.println("111");

  }

  /**

  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

  String username = request.getParameter("username");String blog = request.getParameter("blog");System.out.println(username);

  System.out.println(blog);

  response.setContentType("text/plain; charset=UTF-8");response.setCharacterEncoding("UTF-8");

  //响应流

  response.getWriter().write("It is ok!");

  }

  }

  测试类Test.java

  package me.http;

  import java.util.HashMap;

  import java.util.Map;

  public class Test {

  public static void main(String[] args) {

  /* Post Request */

  Map dataMap = new HashMap();

  dataMap.put("username", "Nick Huang");

  dataMap.put("blog", "IT");

  try {

  System.out.println(new HttpRequestor().doPost("http://localhost:8081/TestProgect2/LoginServlet", dataMap));//System.out.println(new HttpRequestor().doGet("http://localhost:8081/TestProgect2/LoginServlet"));} catch (Exception e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  /* Get Request */

  }

  }

  1.接收post请求类LoginServlet,控制台测试结果2.HttpRequestor接收LoginServlet返回的流

  OK,完成

  对于接收TestProgect2项目中LoginServlet.java类返回的流,在真实环境中可能是异步接收返回的流的,当一台机器A向另外一台机器B发送请求,B接收到A的信息,将信息处理后,需要将处理结果返回即响应返回给A,A会接收到B返回的信息可以另外建一个Servlet类HttpListenerServlet.java来专门异步接收返回的信息package me.http;

  import java.io.BufferedReader;

  import java.io.IOException;

  import java.io.InputStream;

  import java.io.InputStreamReader;

  import javax.servlet.ServletException;

  import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;

  import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/**

  * Servlet implementation class HttpListenerServlet*/

  @WebServlet("/HttpListenerServlet")

  public class HttpListenerServlet extends HttpServlet {private static final long serialVersionUID = 1L;/**

  * @see HttpServlet#HttpServlet()

  */

  public HttpListenerServlet() {

  super();

  // TODO Auto-generated constructor stub

  }

  /**

  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

  }

  /**

  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub

  InputStream inputStream = null;

  inputStream = request.getInputStream();

  InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader reader = new BufferedReader(inputStreamReader);String tempLine = null;

  StringBuffer resultBuffer=new StringBuffer();while ((tempLine = reader.readLine()) != null) {resultBuffer.append(tempLine);

  }

  System.out.println(resultBuffer.toString());}

  }

【java如何利用java.net.URLConnection发送HTTP请求】相关文章:

关于java实现http请求工具类示例11-30

Java 发送邮件09-29

java应该如何构造12-04

如何编写java程序11-22

如何学习JAVA开发10-03

新手如何学习Java09-30

java如何读取CSV09-29

如何学好java语言09-26

java利用反射实现动态代理实现代码11-28

如何正确使用Java数组10-02