天天看點

HttpClient模拟登入

pom依賴

<dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>
           
package cc.mrbird.febs.system.collection.cs;

import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.util.EntityUtils;

import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;

//模拟get請求帶參數
public class CshttpClient {

    private static CloseableHttpClient httpClient = HttpClientBuilder.create().build();

    public static void login(){
        String loginurl = "XXXXXXXXXXXXXXXXXXXX?UserName=XXXX&PassWord=XXXXXXX";
        // 構造參數,即模拟需要輸入的參數
        HttpGet httpPost = new HttpGet(loginurl);
        httpPost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36");
        CloseableHttpResponse response = null;
        try {
            // 向背景請求資料,登陸網站
            response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            String result = EntityUtils.toString(entity, StandardCharsets.UTF_8);
            System.out.println("zhengyihao" + result + "zhengyihao");
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }

//模拟post請求,參數類型為Request Payload類型
public static void fb() {
        String fburl = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
        HttpPost httpPost = new HttpPost(fburl);
        httpPost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36");
        httpPost.addHeader(new BasicHeader("Connection","keep-alive"));
        httpPost.addHeader(new BasicHeader("Sec-Fetch-Mode","cors"));
        httpPost.addHeader(new BasicHeader("Origin","https://wcm.cdstm.cn"));
        httpPost.addHeader(new BasicHeader("X-Requested-With","XMLHttpRequest"));
        httpPost.addHeader(new BasicHeader("Content-Type","application/json;charset=UTF-8"));
        httpPost.addHeader(new BasicHeader("Accept","application/json"));
        httpPost.addHeader(new BasicHeader("Sec-Fetch-Site","same-origin"));
        httpPost.addHeader(new BasicHeader("Accept-Encoding","gzip, deflate, br"));
        httpPost.addHeader(new BasicHeader("Accept-Language","zh-CN,zh;q=0.9"));

        //        httpPost.addHeader("X-Requested-With","XMLHttpRequest");
//        httpPost.setHeader("Content-Type","text/html;charset=utf-8");
        CloseableHttpResponse response = null;

        try{                                                                 //csxml()方法為自己拼接組成的Request Payload參數
            StringEntity stringEntity = new StringEntity(csxml(), Charset.forName("UTF-8"));
            stringEntity.setContentType(new BasicHeader("Content-Type","application/json; charset=utf-8"));
            stringEntity.setContentEncoding(Consts.UTF_8.name());
            httpPost.setEntity(stringEntity);
            response = httpClient.execute(httpPost);
            if(response.getStatusLine().getStatusCode() == 200){
                HttpEntity httpEntity = response.getEntity();
                String toStringEntity = EntityUtils.toString(httpEntity, StandardCharsets.UTF_8);
                System.out.println("monifabu" + toStringEntity + "monifabu");
                EntityUtils.consume(httpEntity);
            }else if(response.getStatusLine().getStatusCode() == 302){
                System.out.println("運作失敗了");
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try{
            response.close();
            httpClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            System.out.println("關閉資源");
        }
    }
}
           

教程點選我