zoukankan      html  css  js  c++  java
  • Java模拟post提交表单数据

      1 package test;
      2 
      3 import java.io.BufferedReader;  
      4 import java.io.DataOutputStream;  
      5 import java.io.IOException;  
      6 import java.io.InputStreamReader;  
      7 import java.net.HttpURLConnection;  
      8 import java.net.URL;  
      9 import java.net.URLEncoder;  
     10   
     11 public class HttpInvoker {  
     12   
     13     public static final String GET_URL = " http://localhost:8080/welcome1 ";  
     14   
     15     public static final String POST_URL = " http://www.court.gov.cn/zgcpwsw/List/ListContent ";  
     16   
     17     public static void readContentFromGet() throws IOException {  
     18         // 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码  
     19         String getURL = GET_URL + " ?username= "  
     20                 + URLEncoder.encode(" fat man ", " utf-8 ");  
     21         URL getUrl = new URL(getURL);  
     22         // 根据拼凑的URL,打开连接,URL.openConnection函数会根据 URL的类型,  
     23         // 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection  
     24         HttpURLConnection connection = (HttpURLConnection) getUrl  
     25                 .openConnection();  
     26         // 进行连接,但是实际上get request要在下一句的 connection.getInputStream()函数中才会真正发到  
     27         // 服务器  
     28         connection.connect();  
     29         // 取得输入流,并使用Reader读取  
     30         BufferedReader reader = new BufferedReader(new InputStreamReader(  
     31                 connection.getInputStream()));  
     32         System.out.println(" ============================= ");  
     33         System.out.println(" Contents of get request ");  
     34         System.out.println(" ============================= ");  
     35         String lines;  
     36         while ((lines = reader.readLine()) != null) {  
     37             System.out.println(lines);  
     38         }  
     39         reader.close();  
     40         // 断开连接  
     41         connection.disconnect();  
     42         System.out.println(" ============================= ");  
     43         System.out.println(" Contents of get request ends ");  
     44         System.out.println(" ============================= ");  
     45     }  
     46   
     47     public static void readContentFromPost() throws IOException {  
     48         // Post请求的url,与get不同的是不需要带参数  
     49         URL postUrl = new URL(POST_URL);  
     50         // 打开连接  
     51         HttpURLConnection connection = (HttpURLConnection) postUrl  
     52                 .openConnection();  
     53         // Output to the connection. Default is  
     54         // false, set to true because post  
     55         // method must write something to the  
     56         // connection  
     57         // 设置是否向connection输出,因为这个是post请求,参数要放在  
     58         // http正文内,因此需要设为true  
     59         connection.setDoOutput(true);  
     60         // Read from the connection. Default is true.  
     61         connection.setDoInput(true);  
     62         // Set the post method. Default is GET  
     63         connection.setRequestMethod("POST");  
     64         // Post cannot use caches  
     65         // Post 请求不能使用缓存  
     66         connection.setUseCaches(false);  
     67         // This method takes effects to  every instances of this class.  
     68         // URLConnection.setFollowRedirects是static 函数,作用于所有的URLConnection对象。  
     69         // connection.setFollowRedirects(true);  
     70   
     71         // This methods only takes effacts to this  instance.  
     72         // URLConnection.setInstanceFollowRedirects 是成员函数,仅作用于当前函数  
     73         connection.setInstanceFollowRedirects(true);  
     74         // Set the content type to urlencoded,  
     75         // because we will write some URL-encoded content to the  connection. Settings above must be set before connect!  
     76         // 配置本次连接的Content-type,配置为application/x- www-form-urlencoded的  
     77         // 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode  
     78         // 进行编码  
     79  
     80         connection.setRequestProperty("Accept", "*/*");
     81         connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
     82         connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6");
     83         connection.setRequestProperty("Connection", "keep-alive");
     84         connection.setRequestProperty("Content-Length", "153");
     85         connection.setRequestProperty("Content-Type",  "application/x-www-form-urlencoded; charset=UTF-8");
     86 //        connection.setRequestProperty("cookie", "Hm_lvt_692544717e4ca5489bff77b2e9b28e7b=1449645321; Hm_lpvt_692544717e4ca5489bff77b2e9b28e7b=1449645391; __jsluid=8c1e0374852916bf96a7f809c2aee3c8; _gscu_482111853=49645323pc25ob94; _gscbrs_482111853=1; ASP.NET_SessionId=m44tcmadhujdeijinvbiecnw; __jsl_clearance=1450332415.032|0|t2eMmMeGhHeoINln2hPaPf4D5HI%3D; _gscu_1241932522=50249161sf1y6f54; _gscs_1241932522=t50334524zs7d8g57|pv:1; _gscbrs_1241932522=1");
     87         connection.setRequestProperty("cookie", "Hm_lvt_692544717e4ca5489bff77b2e9b28e7b=1449645321; Hm_lpvt_692544717e4ca5489bff77b2e9b28e7b=1449645391; __jsluid=8c1e0374852916bf96a7f809c2aee3c8; _gscu_482111853=49645323pc25ob94; _gscbrs_482111853=1; ASP.NET_SessionId=m44tcmadhujdeijinvbiecnw; __jsl_clearance=1450340955.958|0|YZsm9pGKRX79ASJMb7gwQkJv%2FS8%3D; _gsref_1241932522=http://www.court.gov.cn/zgcpwsw/List/List?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6; _gscu_1241932522=50249161sf1y6f54; _gscs_1241932522=t5034096609obrb54|pv:2; _gscbrs_1241932522=1");
     88         connection.setRequestProperty("Host","www.court.gov.cn");
     89         connection.setRequestProperty("Origin","http://www.court.gov.cn");
     90         connection.setRequestProperty("Referer","http://www.court.gov.cn/zgcpwsw/List/List?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6");
     91         connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36");
     92         connection.setRequestProperty("X-Requested-With","XMLHttpRequest");
     93         
     94         
     95         // 连接,从postUrl.openConnection()至此的配置必须要在 connect之前完成,  
     96         // 要注意的是connection.getOutputStream会隐含的进行 connect。  
     97         connection.connect();  
     98         DataOutputStream out = new DataOutputStream(connection  
     99                 .getOutputStream());  
    100         // The URL-encoded contend  
    101         // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
    102         // 表单参数包括:(1)Param:案件类型:刑事案件(2)Index:1
    103         //(3)Page:5(4)Order:法院层级(5)Direction:asc
    104         String content = "Param=%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B%3A%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&Index=4&Page=5&Order=%E6%B3%95%E9%99%A2%E5%B1%82%E7%BA%A7&Direction=asc";
    105 //        String content = "Param="  
    106 //                + URLEncoder.encode("案件类型:刑事案件 ", "utf-8"); 
    107         // DataOutputStream.writeBytes将字符串中的16位的 unicode字符以8位的字符形式写道流里面  
    108         out.writeBytes(content);  
    109   
    110         out.flush();  
    111         out.close(); // flush and close  
    112         BufferedReader reader = new BufferedReader(new InputStreamReader(  
    113                 connection.getInputStream()));  
    114         String line;  
    115         System.out.println(" ============================= ");  
    116         System.out.println(" Contents of post request ");  
    117         System.out.println(" ============================= ");  
    118         while ((line = reader.readLine()) != null) {  
    119             System.out.println(line);  
    120         }  
    121         System.out.println(" ============================= ");  
    122         System.out.println(" Contents of post request ends ");  
    123         System.out.println(" ============================= ");  
    124         reader.close();  
    125         connection.disconnect();  
    126     }  
    127     
    128   
    129     /** */  
    130     /** 
    131      * @param args 
    132      */  
    133     public static void main(String[] args) {  
    134         // TODO Auto-generated method stub  
    135         try {  
    136 //            readContentFromGet();  
    137             readContentFromPost();  
    138         } catch (IOException e) {  
    139             // TODO Auto-generated catch block  
    140             e.printStackTrace();  
    141         }  
    142     }  
    143   
    144 }  

     第一次访问出现了521的错误状态码,原因是:

    (https://www.zhihu.com/question/31015275)

  • 相关阅读:
    flask_admin+flask_login 整合,jieba分词+echarts数据分析可视化
    古诗词网爬虫实现
    Flask admin Flask login 整合模板
    API网关Kong
    Flask添加新命令
    MyBatis连接MySQL8配置
    golang锁
    golang goroutine
    golang管道
    golang结构体
  • 原文地址:https://www.cnblogs.com/gui0901/p/5057155.html
Copyright © 2011-2022 走看看