Http Post请求示例

  1. 1.maven中jar设置
  2. 2.请求javabean示例
  3. 3.http-post请求
  4. 4.springboot服务搭建
  5. 5.总结

项目参考

1.maven中jar设置

   <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.8</version>
      <scope>provided</scope>
   </dependency>
<dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.8.4</version>
 </dependency>
<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

2.请求javabean示例

@Data
public class NetOrderRequest {
     private String    StartDate;  //开始日期:
     private String    EndDate;   //结束日期:
     private String    OrderStatus;  //订单状态:
     private String    BranchNo;   //网点编号:
     private String    OutletType;  //网点类型:
     private String    SchemeBatch;  //方案批次:
     private String    StatisticalUnit;//统计单位:
}

3.http-post请求

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import net.sf.json.JSONObject;

public class HttpTest{

     public static final String ADD_URL = "http://192.168.18.106:8880/testE";
     public static final String Encoding = "UTF-8";

        public static void HttpPostHandler(String path) {

            try {
                //创建连接
                URL url = new URL(ADD_URL);
                HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                connection.setConnectTimeout(30000);//设置连接主机超时(单位:毫秒)
                connection.setReadTimeout(30000); //设置从主机读取数据超时(单位:毫秒)
                connection.setDoOutput(true);  // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, 默认情况下是false; 
                connection.setDoInput(true);  //设置是否从httpUrlConnection读入,默认情况下是true; 
                connection.setRequestMethod("POST");//设定请求的方法为"POST",默认是GET 
                connection.setUseCaches(false); //post 请求不能使用缓存
                connection.setInstanceFollowRedirects(true);
                connection.setRequestProperty("Content-Type","application/json");//设定传送的内容类型json格式的数据

                connection.connect(); //建立连接

                //POST请求
                DataOutputStream out = new DataOutputStream(connection.getOutputStream());

                //json数据传送参数
                JSONObject obj = new JSONObject();
                    obj.element("startDate", "asdf");
                    obj.element("endDate", "10.21.243.234");
                    obj.element("orderStatus", 8080);
                    obj.element("branchNo", "001");
                    obj.element("outletType", "asd");
                    obj.element("schemeBatch", "asd");
                    obj.element("statisticalUnit", "dasd");

                System.out.println(obj.toString());

                out.writeBytes(obj.toString());
                out.flush();
                out.close();

                //读取响应
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        connection.getInputStream()));

                String lines;
                StringBuffer sb = new StringBuffer("");
                while ((lines = reader.readLine()) != null) {
                    lines = new String(lines.getBytes(), Encoding);
                    sb.append(lines);
                }
                System.out.println(sb);
                reader.close();
                // 断开连接
                connection.disconnect();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        public static void main(String[] args) {
            HttpPostHandler(ADD_URL);
        }    
}

4.springboot服务搭建

@RestController
public class EController {

    @RequestMapping("/testE")
    public String E(@RequestBody NetOrderRequest netOrderRequest){
        System.out.println(netOrderRequest.getEndDate());
        System.out.println(netOrderRequest.toString());
        return new Gson().toJson(new NetOrderResponse()).toString();
    }
}

5.总结

(1).HttpURLConnection的connect()函数,建立与服务器的tcp连接,但没有实际发送http请求。 无论是post还是get,http请求实际上直到HttpURLConnection的getInputStream()函数才正式发送出去。

(2).用POST方式发送URL请求时,URL请求参数的设定顺序是重中之重, 连接对象(get,set函数) 必须在connect()函数执行之前完成。对outputStream的写操作,必须在inputStream的读操作之前。 这些顺序实际上是由http请求的格式决定的。

(3).http请求由两部分组成, 一个是http头,所有http请求配置都在http头里面定义, 另一个是正文content。 connect()函数会根据HttpURLConnection对象的配置值生成http头部信息,因此在调用connect函数之前,必须把所有的配置准备好。

(4).http头后面紧跟着的是http请求的正文,正文的内容是通过outputStream流写入的,outputStream是字符串流,写入的数据不会立即发送到网络, 而是存在于内存缓冲区中,等待outputStream流关闭时,根据输入的内容生成http正文。

此时,http请求的东西已经全部准备就绪。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器,然后返回一个输入流,用于读取服务器对于此次http请求的返回信息。

(5).由于http 请求在getInputStream的时候已经发送出去(包括http头和正文),因此在getInputStream()函数 之后对connection对象进行设置(对http头的信息进行修改)或者写入outputStream(对正文进行修改)都是没有意义的了,执行这些操作会导致异常的发生。

文章标题:Http Post请求示例

发布时间:2020-05-29, 11:03:56

最后更新:2020-05-29, 11:03:57