私はプログラミングJavaで始まり、簡単な "バックエンドクローラー"を作成することはありません。このため私はポストでログイン機能を必要としていますが問題はありませんが、どのようにクッキーの戦争を保存することができますし、次のリクエストでスクリプトは再度ログインする必要はありませんか?Java Apache HTTPクライアント - 次のリクエストのためにクッキーを保存します。
私に例を挙げてもらえますか?私はインターネットで解決策を見つけることができません。
多分私は最初のページからクッキーを使って次のリクエストを行うことができますか? :)
あなたの答えに期待してください。
私の悪い英語のために申し訳ありません。あなたは、応答からSet-Cookieヘッダーを取得し、その値、 を保存し、Cookieヘッダとその値を持つ次の要求を依頼する必要がありますP
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Login {
public static String loginAndGetHTML() throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
String html;
HttpPost HttpPost = new HttpPost("http://www.google.com");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("username", "admin"));
nvps.add(new BasicNameValuePair("password", "1234"));
HttpPost.setEntity(new UrlEncodedFormEntity(nvps));
HttpPost.addHeader("Referer", "http://tutorials.amazingcode.de/login/index.php");
HttpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0");
CloseableHttpResponse response = httpclient.execute(HttpPost);
try {
HttpEntity entity = response.getEntity();
html = EntityUtils.toString(entity);
EntityUtils.consume(entity);
} finally {
response.close();
}
if(html.contains("Falsche Nutzerdaten")) {
throw new Exception("Login fehlgeschlagen");
}
return html;
}
public static String parseHTML(String html) throws Exception {
Document doc = Jsoup.parse(html);
String zahl = doc.getElementById("zahl").text();
return zahl;
}
}
の詳細説明する人のために、この記事を参照してください – Joni