Advertisement

Java Web中使用HttpClient模拟浏览器进行登录并发起请求

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本教程介绍如何在Java Web开发中利用HttpClient库模拟浏览器行为执行登录操作及后续数据请求,适用于需要自动化处理网页交互的应用场景。 在Java Web应用程序中使用HttpClient库模拟浏览器行为以实现登录并发起请求的技术,在爬虫、自动化测试及数据抓取等领域应用广泛。 执行这一过程需要遵循以下步骤: 1. 访问一个需先登录才能访问的页面或资源。 2. 服务器检查当前会话是否已包含有效的登录信息。如果未找到,将重定向至登录页。 3. 在登录表单中手动填写正确的用户名和密码并提交请求。 4. 如果验证通过,服务器将在Session中保存成功登陆的信息,并返回一个含有该登录状态的Cookie给客户端浏览器。 5. 浏览器携带此包含会话信息(如SessionID)的Cookie自动跳转回初始访问地址。 6. 服务端再次检查Session以确认用户是否已正确登录。如果验证通过,服务器将请求资源反馈至浏览器。 在Java中使用HttpClient库可以便捷地实现以上步骤。这里是一个简单的示例代码: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.CookieStore; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; public class HttpClientDemo { public static void main(String[] args) throws Exception { getResoucesByLoginCookies(); } private static void getResoucesByLoginCookies() throws Exception { String username = ...; // 登录用户名 String password = ...; // 登录密码 String urlLogin = http://hx.buscoming.cn/ApiSecurityLogon?UserCode= + username + &Password= + password; String urlAfter = http://hx.buscoming.cn/ApiSecurityGetLoginAccount; DefaultHttpClient client = new DefaultHttpClient(new PoolingClientConnectionManager()); 第一次请求登录页面 获得cookie HttpPost post = new HttpPost(urlLogin); HttpResponse response = client.execute(post); HttpEntity entity = response.getEntity(); 第二次请求需要的资源 HttpGet get = new HttpGet(urlAfter); response = client.execute(get); entity = response.getEntity(); } } ``` 此代码中,我们首先使用HttpPost方法模拟浏览器登陆服务器,接着利用HttpGet方式获取所需资源。整个过程中采用DefaultHttpClient对象,并通过PoolingClientConnectionManager来管理连接池以优化性能。 实际应用时需根据具体情况做出调整,如处理异常、Cookie管理等。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Java Web使HttpClient
    优质
    本教程介绍如何在Java Web开发中利用HttpClient库模拟浏览器行为执行登录操作及后续数据请求,适用于需要自动化处理网页交互的应用场景。 在Java Web应用程序中使用HttpClient库模拟浏览器行为以实现登录并发起请求的技术,在爬虫、自动化测试及数据抓取等领域应用广泛。 执行这一过程需要遵循以下步骤: 1. 访问一个需先登录才能访问的页面或资源。 2. 服务器检查当前会话是否已包含有效的登录信息。如果未找到,将重定向至登录页。 3. 在登录表单中手动填写正确的用户名和密码并提交请求。 4. 如果验证通过,服务器将在Session中保存成功登陆的信息,并返回一个含有该登录状态的Cookie给客户端浏览器。 5. 浏览器携带此包含会话信息(如SessionID)的Cookie自动跳转回初始访问地址。 6. 服务端再次检查Session以确认用户是否已正确登录。如果验证通过,服务器将请求资源反馈至浏览器。 在Java中使用HttpClient库可以便捷地实现以上步骤。这里是一个简单的示例代码: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.CookieStore; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; public class HttpClientDemo { public static void main(String[] args) throws Exception { getResoucesByLoginCookies(); } private static void getResoucesByLoginCookies() throws Exception { String username = ...; // 登录用户名 String password = ...; // 登录密码 String urlLogin = http://hx.buscoming.cn/ApiSecurityLogon?UserCode= + username + &Password= + password; String urlAfter = http://hx.buscoming.cn/ApiSecurityGetLoginAccount; DefaultHttpClient client = new DefaultHttpClient(new PoolingClientConnectionManager()); 第一次请求登录页面 获得cookie HttpPost post = new HttpPost(urlLogin); HttpResponse response = client.execute(post); HttpEntity entity = response.getEntity(); 第二次请求需要的资源 HttpGet get = new HttpGet(urlAfter); response = client.execute(get); entity = response.getEntity(); } } ``` 此代码中,我们首先使用HttpPost方法模拟浏览器登陆服务器,接着利用HttpGet方式获取所需资源。整个过程中采用DefaultHttpClient对象,并通过PoolingClientConnectionManager来管理连接池以优化性能。 实际应用时需根据具体情况做出调整,如处理异常、Cookie管理等。
  • JMeter使JMXIPHTTP
    优质
    本教程介绍如何利用JMeter通过JMX文件执行自动化测试,专注于配置和运行并发IP对HTTP服务发起请求的具体方法。适合希望提高性能测试效率的技术人员学习参考。 使用JMeter进行IP模拟的HTTP请求并发测试和压力测试。
  • Gateway使案例:通过httpClient
    优质
    本案例介绍如何在Gateway中利用httpClient库发起网络请求,展示其配置与应用方法,帮助开发者快速上手实现接口调用。 本项目采用Spring Boot作为服务基本框架,使用的组件包括eureka和gateway。如需了解启动步骤及效果演示,请关注公众号“程序艺术室”,回复关键词“gatewaydemo”。
  • 使Jsoup与Httpclient及数据抓取
    优质
    本教程介绍如何利用Java中的Jsoup和HttpClient库实现网页的模拟登录,并进一步抓取所需数据。适合需要自动化处理网站信息的开发者学习参考。 Jsoup与HttpClient结合使用进行模拟登录并抓取页面的Java代码如下所示: ```java package com.app.html; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import java.text.SimpleDateFormat; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; public class HttpClientHtml { private static final String SITE = login.goodjobs.cn; private static final int PORT = 80; private static final String loginAction = /index.php/action/UserLogin; private static final String forwardURL = http://user.goodjobs.cn/dispatcher.php/module/Personal/?skip_fill=1; // 其他静态常量省略 /** * 模拟登录 * * @param LOGON_SITE 登录站点地址 * @param LOGON_PORT 端口 * @param login_Action 登录动作URL * @param params 用户名和密码参数数组,包含两个元素:用户名及密码 */ private static HttpClient loginHtml(String LOGON_SITE, int LOGON_PORT, String login_Action, String...params) throws Exception { HttpClient client = new HttpClient(); client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT); // 设置登录参数并执行POST请求 PostMethod postLogin = new PostMethod(login_Action); NameValuePair[] postData = {new NameValuePair(memberName, params[0]), new NameValuePair(password, params[1])}; postLogin.setRequestBody(postData); client.executeMethod(postLogin); // 输出Cookies信息 CookiePolicy.getDefaultSpec().match(LOGON_SITE, LOGON_PORT, /, false, client.getState().getCookies()).forEach(cookie -> System.out.println(cookie)); return client; } /** * 使用已登录的客户端获取指定页面内容并保存为文件。 * * @param client 已经执行过loginHtml方法返回的HttpClient对象 * @param newUrl 需要访问的目标URL地址 */ private static String createHtml(HttpClient client, String newUrl) throws Exception { SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd); // 设置文件保存路径与名称 FileUtil.write(client.executeMethod(new PostMethod(newUrl)).getResponseBodyAsString(), toUrl + format.format(new Date())+ _ + 1 + .html); System.out.println(\n写入文件成功!); } /** * 使用Jsoup解析HTML代码,并对特定标签进行处理。 * * @param filePath HTML文档路径 * @param random 随机数,用于生成新的输出文件名 */ private static String JsoupFile(String filePath, int random) { SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd); try (BufferedReader in = new BufferedReader(new FileReader(filePath)); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(toUrl + format.format(new Date())+ _new_ + random+ .html), gbk))) { Document doc = Jsoup.parse(in, GBK); // 处理link标签 Elements links = doc.select(link); for (Element link : links) { String hrefAttr = link.attr(href).replace(/personal.css, css); if (hrefAttr.contains(/personal.css)) { Element hrefVal=link.attr(href, hrefAttr); out.write(hrefVal.toString()); } } // 处理script标签 Elements scripts = doc.select(script); for (Element js : scripts) { String jsrc = js.attr(src).replace(/scripts/fValidate/fValidate.one.js, _JS); if (jsrc.contains(/fValidate.one.js)) { Element val=js.attr(src, jsrc); out.write(val.toString()); } } // 处理body标签中的所有元素 Elements body = doc.getElementsByTag(body); for (Element tag : body.select(*)) { String src = tag.attr(src).replace(/images, Img); if (src.contains(/images)) { tag.attr(src, src); out.write(body.toString()); } } } catch (IOException e) { e.printStackTrace(); } return toUrl + format.format(new Date())+ _new_ + random + .html; } public static void main(String[] args) throws Exception { String [] params={admin,admin123}; HttpClient client = loginHtml(SITE, PORT, loginAction,params); createHtml(client, forwardURL
  • 使CloseableHttpClientGET/POST(HttpClient)
    优质
    本教程详细讲解了如何利用Apache HttpClient库中的CloseableHttpClient类执行HTTP GET和POST请求的方法与技巧。 HttpClient使用CloseableHttpClient发送GET和POST请求。
  • PHP curl IP
    优质
    本教程详细介绍如何使用 PHP 的 cURL 函数库模拟不同 IP 地址和浏览器信息发送 HTTP 请求,适用于网页数据抓取及自动化测试场景。 PHP使用curl可以模拟用户IP地址以及浏览器访问信息来发送请求。下面是相关代码示例: ```php ``` 这段代码展示了如何使用PHP中的cURL函数来模拟特定的用户IP地址和浏览器信息,以便能够发送请求到指定的网址。
  • PHP Curl GET/POST
    优质
    本教程详细介绍了如何使用 PHP 的 cURL 函数库来模拟浏览器进行 GET 和 POST 请求,适合初学者学习网络编程。 这个curl文件提供了vget、vpost、vlogin等功能,可以模拟HTTP和HTTPS等多种请求,功能非常强大。
  • Java后台使HttpURLConnection类示例(适于接口调
    优质
    本示例展示如何在Java后端开发中利用HttpURLConnection类发送HTTP请求,模拟浏览器行为以进行API接口调用。适合初学者参考学习。 本段落主要介绍了使用Java后台调用HttpURLConnection类来模拟浏览器请求的实例。该实例适用于接口调用,并具有一定的实用价值。需要相关参考的朋友可以阅读此文。