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がクッキーをクリアしない限りずっといます.
に頼る
上陸する
データを取る
WebClientをオフにしない限り、wc.getPage(url).getWebResponse().getContentAsString();すべてのインタフェースからデータを返す
すべてのコードを添付
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;
}
}