Java原生的API可用于发送HTTP请求

即java.net.URL、java.net.URLConnection,JDK自带的类;

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

2.设置请求的参数

3.发送请求

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

5.关闭输入流

  • 封装请求类

     package com.util;
    
     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.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Iterator;
    import java.util.Map; public class HttpConnectionUtil { // post请求
    public static final String HTTP_POST = "POST"; // get请求
    public static final String HTTP_GET = "GET"; // utf-8字符编码
    public static final String CHARSET_UTF_8 = "utf-8"; // HTTP内容类型。如果未指定ContentType,默认为TEXT/HTML
    public static final String CONTENT_TYPE_TEXT_HTML = "text/xml"; // HTTP内容类型。相当于form表单的形式,提交暑假
    public static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded"; // 请求超时时间
    public static final int SEND_REQUEST_TIME_OUT = 50000; // 将读超时时间
    public static final int READ_TIME_OUT = 50000; /**
    *
    * @param requestType
    * 请求类型
    * @param urlStr
    * 请求地址
    * @param body
    * 请求发送内容
    * @return 返回内容
    */
    public static String requestMethod(String requestType, String urlStr, String body) { // 是否有http正文提交
    boolean isDoInput = false;
    if (body != null && body.length() > 0)
    isDoInput = true;
    OutputStream outputStream = null;
    OutputStreamWriter outputStreamWriter = null;
    InputStream inputStream = null;
    InputStreamReader inputStreamReader = null;
    BufferedReader reader = null;
    StringBuffer resultBuffer = new StringBuffer();
    String tempLine = null;
    try {
    // 统一资源
    URL url = new URL(urlStr);
    // 连接类的父类,抽象类
    URLConnection urlConnection = url.openConnection();
    // http的连接类
    HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
    // http正文内,因此需要设为true, 默认情况下是false;
    if (isDoInput) {
    httpURLConnection.setDoOutput(true);
    httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length()));
    }
    // 设置是否从httpUrlConnection读入,默认情况下是true;
    httpURLConnection.setDoInput(true);
    // 设置一个指定的超时值(以毫秒为单位)
    httpURLConnection.setConnectTimeout(SEND_REQUEST_TIME_OUT);
    // 将读超时设置为指定的超时,以毫秒为单位。
    httpURLConnection.setReadTimeout(READ_TIME_OUT);
    // Post 请求不能使用缓存
    httpURLConnection.setUseCaches(false);
    // 设置字符编码
    httpURLConnection.setRequestProperty("Accept-Charset", CHARSET_UTF_8);
    // 设置内容类型
    httpURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE_FORM_URL);
    // 设定请求的方法,默认是GET
    httpURLConnection.setRequestMethod(requestType); // 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。
    // 如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用。
    httpURLConnection.connect(); if (isDoInput) {
    outputStream = httpURLConnection.getOutputStream();
    outputStreamWriter = new OutputStreamWriter(outputStream);
    outputStreamWriter.write(body);
    outputStreamWriter.flush();// 刷新
    }
    if (httpURLConnection.getResponseCode() >= 300) {
    throw new Exception(
    "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
    } if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
    inputStream = httpURLConnection.getInputStream();
    inputStreamReader = new InputStreamReader(inputStream);
    reader = new BufferedReader(inputStreamReader); while ((tempLine = reader.readLine()) != null) {
    resultBuffer.append(tempLine);
    resultBuffer.append("\n");
    }
    } } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } finally {// 关闭流 try {
    if (outputStreamWriter != null) {
    outputStreamWriter.close();
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    if (outputStream != null) {
    outputStream.close();
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    if (reader != null) {
    reader.close();
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    if (inputStreamReader != null) {
    inputStreamReader.close();
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    try {
    if (inputStream != null) {
    inputStream.close();
    }
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    return resultBuffer.toString();
    } /**
    * 将map集合的键值对转化成:key1=value1&key2=value2 的形式
    *
    * @param parameterMap
    * 需要转化的键值对集合
    * @return 字符串
    */
    public static String convertStringParamter(Map parameterMap) {
    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("&");
    }
    }
    }
    return parameterBuffer.toString();
    } public static void main(String[] args) throws MalformedURLException { System.out.println(requestMethod(HTTP_GET, "http://127.0.0.1:8080/test/TestHttpRequestServlet",
    "username=123&password=我是谁")); }
    }

    HttpConnectionUtil

  • 测试Servlet

     package com.servlet;
    
     import java.io.IOException;
    
     import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse; public class TestHttpRequestServelt extends HttpServlet { @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("this is a TestHttpRequestServlet");
    request.setCharacterEncoding("utf-8"); String username = request.getParameter("username");
    String password = request.getParameter("password"); System.out.println(username);
    System.out.println(password); response.setContentType("text/plain; charset=UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write("This is ok!"); }
    }

    TestHttpRequestServelt

  • web.xml配置

     <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
    <display-name>test</display-name> <servlet>
    <servlet-name>TestHttpRequestServlet</servlet-name>
    <servlet-class>com.servlet.TestHttpRequestServelt</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>TestHttpRequestServlet</servlet-name>
    <url-pattern>/TestHttpRequestServlet</url-pattern>
    </servlet-mapping> <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

    web.xml

【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)的更多相关文章

  1. Java利用原始HttpURLConnection发送http请求数据小结

    1,在post请求下,写输出应该在读取之后,否则会抛出异常. 即操作OutputStream对象应该在InputStreamReader之前. 2.conn.getResponseCode()获取返回 ...

  2. 【JAVA】通过HttpClient发送HTTP请求的方法

    HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...

  3. HttpURLConnection发送POST请求(可包含文件)

    import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io. ...

  4. 谈谈Java利用原始HttpURLConnection发送POST数据

    这篇文章主要给大家介绍java利用原始httpUrlConnection发送post数据,设计到httpUrlConnection类的相关知识,感兴趣的朋友跟着小编一起学习吧 URLConnectio ...

  5. java 常见几种发送http请求案例

    import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...

  6. HttpURLConnection 发送http请求帮助类

    java 利用HttpURLConnection 发送http请求 提供GET / POST /上传文件/下载文件 功能 import java.io.*; import java.net.*; im ...

  7. java中发送http请求的方法

    package org.jeecgframework.test.demo; import java.io.BufferedReader; import java.io.FileOutputStream ...

  8. HttpUrlConnection发送url请求(后台springmvc)

    1.HttpURLConnection发送url请求 public class JavaRequest { private static final String BASE_URL = "h ...

  9. 发送http请求的方法

    在http/1.1 协议中,定义了8种发送http请求的方法 get post options head put delete trace connect patch. 根据http协议的设计初衷,不 ...

随机推荐

  1. zabbix3.4.7 饼图显示问题

    最近安装了zabbix3.4.7,发现系统自带Template OS Linux模版饼图(Pie)有两个问题: Total disk space on / 显示为 no data,也就是没有数据: 把 ...

  2. 自动化运维工具 SaltStack 在云计算环境中的实践

    http://www.talkwithtrend.com/Article/218473

  3. myeclipse2016-ci破解疑难杂症问题整理

    感谢网上的各位大神,在你们的基础,我又整理了下安装成功的心得,破解不成功时一定注意下红色字体内容,避免被坑,都是教训. 试了网上N种破解工具+方法,Myeclipse 2016装了很多遍(本人官网下载 ...

  4. 将 MyBatis3 的支持添加到 Spring

    http://www.mybatis.org/spring/zh/index.html What is MyBatis-Spring? MyBatis-Spring 会帮助你将 MyBatis 代码无 ...

  5. Gradle Maven部署,转化

    参考:(易百教程)http://www.yiibai.com/gradle/gradle_deployment.html 目录: Gradle部署 Maven转化为Gradle Gradle部署: c ...

  6. python post json applidation/json

    如果使用headers = {"Content-Type": "application/json"},在后台使用request.POST.get()无法获取数据 ...

  7. virtual abstract override new 几点学习

    1.Vitual方法和普通方法区别为:继承其的子类可以用override/new在重载此方法,也可以不重载其方法,有方法体(可以写语句),override修饰则调用子类方法2.abstract类中抽象 ...

  8. python格式化输出(转)

    在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出.Python中内置有对字符串进行格式化的操作%. 模板 格式化字符串时,Python使用一个字符串作为模板.模 ...

  9. 自然对数e(转)

    e表示增长的极限 e=limx→+∞ (1+1/x)^x≍2.71828 假设,一根竹子,第一天是1米,第二天长了1米,然后这根柱子的长度变成了2米.相当于 (1+1/1)^1.上面这个假设,如果仔细 ...

  10. 删除临时表空间ora-25152错误

    删除临时表空间,或者收缩临时表空间经常会出现表空间占用等情况. 下面我们就对这种情况进行处理, 首先查找被锁的sid: SELECT a.INST_ID,b.TABLESPACE , b.segfil ...