JAva WebClientアナログログインによるインタフェースデータの取得

9912 ワード

JAvaはWebClientを使用してバックグラウンドログインを実現
WebClient
WebClientはSpring WebFlux 5.0バージョンから提供される非ブロックの応答プログラミングに基づくHttp要求を行うクライアントツールです.その応答式プログラミングはReactorに基づいている.WebClientでは、標準的なHttpリクエスト方式に対応するget、post、put、deleteなどの方法が提供されており、対応するリクエストを開始するために使用することができます.WebClientは、WebClient.create()を使用してWebClientのインスタンスを作成し、get()、post()などの呼び出し方法を選択し、uri()は要求を必要とするパスを指定し、retrieve()は要求を開始して応答を得るために使用し、bodyToMono(String.class)は要求結果をStringとして処理する必要があることを指定し、ReactorのMonoオブジェクトとしてパッケージすることができます.
バックグラウンドでデータを取得するのは主にクッキーがどのように保持されているかの問題で、一部のサイトはログイン暗号化が複雑なので、webclientでログインをシミュレートすることができ、暗号化を迂回することができ、WebClientがクッキーをクリアしない限りずっといます.
に頼る
        <dependency>
			<groupId>net.sourceforge.htmlunit</groupId>
			<artifactId>htmlunit</artifactId>
			<version>2.36.0</version>
		</dependency>

上陸する
public void login() throws FailingHttpStatusCodeException, IOException {
		HtmlPage page = null;
		//         
		URL url = new URL("****");//  url
		page = (HtmlPage) wc.getPage(url);//page          
		HtmlInput usernameInput = page.getHtmlElementById("LoginName");//  getHtmlElementById     
		HtmlInput pswInput = page.getHtmlElementById("Password");
		//      “  ”
		usernameInput.setValueAttribute("admin");
		pswInput.setValueAttribute("cjglyjsbyy");
		//       
		HtmlInput btn = page.getHtmlElementById("btnLogin");
		try {
			btn.click();//      
			Log.debug(wc.getCookies(url).toString());
		} catch (IOException e) {
			e.printStackTrace();
			hLog.error(e);
		}
	}

データを取る
//url           
public String ajax(String Url) throws FailingHttpStatusCodeException, IOException {
		URL url = new URL(Url);
		String res = "";
		res = wc.getPage(url).getWebResponse().getContentAsString();
		if (analysisRes(res)) {//                       
			login();
			res = wc.getPage(url).getWebResponse().getContentAsString();
		}
		Log.debug(res);
		//          
		return res;//           
	}

WebClientをオフにしない限り、wc.getPage(url).getWebResponse().getContentAsString();すべてのインタフェースからデータを返す
すべてのコードを添付

public class  Client {

	WebClient wc;
	public  Client(WebClient webClient) {
		wc = webClient;
		wc.getOptions().setJavaScriptEnabled(true);//  js
		wc.getOptions().setCssEnabled(true);//  CSS,  CSS   
		wc.setAjaxController(new NicelyResynchronizingAjaxController());//    ajax,              
	}

	public void login() throws FailingHttpStatusCodeException, IOException {
		HtmlPage page = null;
		//         
		URL url = new URL("http://****");
		page = (HtmlPage) wc.getPage(url);
		HtmlInput usernameInput = page.getHtmlElementById("LoginName");
		HtmlInput pswInput = page.getHtmlElementById("Password");
		//      “  ”
		usernameInput.setValueAttribute("admin");
		pswInput.setValueAttribute("cjgly**y");
		//       
		HtmlInput btn = page.getHtmlElementById("btnLogin");
		try {
			btn.click();
			Log.debug(wc.getCookies(url).toString());
		} catch (IOException e) {
			e.printStackTrace();
			hLog.error(e);
		}
	}

	public String ajax(String Url) throws FailingHttpStatusCodeException, IOException {
		URL url;
		String res = "";
		url = new URL(Url);
		res = wc.getPage(url).getWebResponse().getContentAsString();
		if (analysisRes(res)) {//analysisRes()         
			login();
			res = wc.getPage(url).getWebResponse().getContentAsString();
		}
		Log.debug(res);
		//          
		return res;
	}

	 
}