-
httpclient模拟登入email.yahoo.co.jp出现验证码30
我用httpclient模拟登入时出现文字验证,而使用浏览器时则不会, 我用ff查看他的请求信息发现如果没有cookie时会出现文字验证。
请问httpclient怎么处理cookie信息的?
我要跳过文字验证怎么处理?
问题补充:我现在能模拟登入进成功,但是他先会跳到文字验证界面。 如果我用浏览器来登入的话,第一次会进入文字验证界面,但是可在文字验证界面在跳回登入界面登入则可以登入。
我发现里面的cookie信息是在文字验证界面拿到服务器给的cookie提供后续操作。 我的代码也是这样的思路但是服务器不认。 我的q 64912766 。求大神指导
问题补充:哎!
谁知道用什么工具能监听httpclient的请求..
我要监听我写的jar包程序.2012年8月07日 02:01
3个答案 按时间排序 按投票排序
-
我又看了下,从结论说,我投降了。哈哈。
尝试的方向有这么几个
- 设置request的header,伪装成浏览器。
- 保留每次请求的信息,包括Cookie。
- 尝试先去登录画面,取得所以Hidden信息,登录时一并提交。
都没有用。
看文字登录画面的日文,他们似乎不支持非浏览器方式。
所以,我们基本上属于黑客行为。不是说非法什么的,我想强调的是:
“即便你这次搞定,也会不稳定的!”
比如被他们发现后,增加检查方式等等。
所以,我建议你换其他方式,比如走Pop3协议,或等待他们公开API,像美国yahoo那样......
代码一并给你做参考。public class HttpClient { private static final String CHARSET = "euc-jp"; private static final String YAHOO_Mail = "https://login.yahoo.co.jp/config/login_verify2?.src=ym"; private static final String YAHOO_Login = "https://login.yahoo.co.jp/config/login?"; public static void main(String[] args) { DefaultHttpClient client = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); // Goto login page. HttpRequestBase request = createPost(null, YAHOO_Mail); String result = executeRequest(request, client, localContext); // Login. Map<String, Object> param = new HashMap<String, Object>(); param.put(".src", "ym"); param.put("login", "YourName"); param.put("passwd", "YourPassword"); param.put(".albatross", getParam(result, ".albatross")); param.put(".tries", 1); param.put(".partner", "pc"); param.put(".u", getParam(result, ".u")); param.put(".v", "0"); param.put(".challenge", getParam(result, ".challenge")); param.put(".hasMsgr", "0"); param.put(".chkP", "Y"); param.put(".done", "http://www.yahoo.co.jp"); request = createPost(param, YAHOO_Login); executeRequest(request, client, localContext); } static String executeRequest(HttpUriRequest request, DefaultHttpClient client, HttpContext context) { try { HttpResponse response = client.execute(request, context); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity); int statusCode = response.getStatusLine().getStatusCode(); System.out.println("===------------- " + statusCode); System.out.println(result); // close。 EntityUtils.consume(entity); return result; } catch (Exception e) { request.abort(); throw new RuntimeException(e); } } /** * Get hidden value. * @param from * @param key * @return */ static String getParam(String from, String key) { String start = key + "\" value=\""; int pos = from.indexOf(start); if (pos < 0) { return ""; } pos = +pos + start.length(); return from.substring(pos, from.indexOf("\"", pos + 1)); } static HttpRequestBase createPost(Map<String, Object> param, String uri) { HttpPost result = new HttpPost(uri); try { String queryString = toQueryString(param); StringEntity entity = new StringEntity(queryString, CHARSET); entity.setContentType(URLEncodedUtils.CONTENT_TYPE + HTTP.CHARSET_PARAM + CHARSET); result.setEntity(entity); result.setHeader(new BasicHeader( "User-Agen", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 1.7; .NET CLR 1.1.4322; CIBA; .NET CLR 2.0.50727)")); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } return result; } static String toQueryString(final Map<String, Object> map) { StringBuilder sb = new StringBuilder(); if (map == null) { return sb.toString(); } for (Map.Entry<String, Object> entry : map.entrySet()) { Object value = entry.getValue(); if (value == null) { continue; } if (sb.length() > 0) { sb.append("&"); } sb.append(entry.getKey()).append("=").append(value.toString()); } return sb.toString(); } }
2012年8月08日 12:09
-
通过httpclient是可以获取到cookie的,不过需要重新包装成java ee的cookie,然后添加到response中即可。
HttpClient client = new HttpClient(); client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); //登录成功后需要访问的url GetMethod authget = new GetMethod(url); try { client.executeMethod(authget); } catch(HttpException httpe) { httpe.printStackTrace(); } catch(IOException ioe) { ioe.printStackTrace(); } finally { authget.releaseConnection(); } NameValuePair[] data = new NameValuePair[2]; data[0] = new NameValuePair(J_USERNAME, user.getName()); data[1] = new NameValuePair(J_PASSWORD, user.getPassword()); PostMethod authpost = new PostMethod(context + REDIRECT_LOGIN); authpost.setRequestBody(data); try { client.executeMethod(authpost); org.apache.commons.httpclient.Cookie[] cookies = client.getState().getCookies(); for(int i = 0; i < cookies.length; i++) { javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie(cookies[i].getName(), cookies[i].getValue()); /** * response添加登录成功后产生的cookie */ response.addCookie(cookie); } /** * 重定向至目标地址 */ response.sendRedirect(forword); } catch(HttpException httpe) { httpe.printStackTrace(); return; } catch(IOException ioe) { ioe.printStackTrace(); return; } finally { authpost.releaseConnection(); }
以上代码是本人模拟登录后,再进行跳转的实际代码,仅供参考。2012年8月07日 12:00
-
HTTPComponents简单用过,但没有涉及到Cookie。
给你个大概的思路吧。
1.自己生成个Cookie。
2.把Cookie设置进Request里。
如下DefaultHttpClient httpclient = new DefaultHttpClient(); // Create a local instance of cookie store CookieStore cookieStore = new MyCookieStore(); // Populate cookies if needed BasicClientCookie cookie = new BasicClientCookie("name", "value"); cookie.setVersion(0); cookie.setDomain(".mycompany.com"); cookie.setPath("/"); cookieStore.addCookie(cookie); // Set the store httpclient.setCookieStore(cookieStore);
参考http://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html#d5e669
2012年8月07日 11:39
相关推荐
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods....
http://jakarta.apache.org/commons/httpclient/ org.apache.commons.httpclient.URI org.apache.commons.httpclient.Wire org.apache.commons.httpclient.Cookie org.apache.commons.httpclient.Header org.apache.commons...
2013-11-21 15:31 292,890 httpclient-4.0.2.jar 2017-12-20 12:08 351,132 httpclient-4.1.1.jar 2012-08-03 01:45 451,595 httpclient-4.1.2-sources.jar 2012-08-03 01:44 352,254 httpclient-4.1.2.jar 2012-08-...
《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...
《深入理解HTTPClient 4.5及其依赖》 在Java编程世界中,HTTPClient是一个非常重要的库,它允许开发者执行HTTP请求并处理响应。本文将深入探讨`httpclient-4.5.jar`这个包,以及它所依赖的相关jar包,帮助你更好地...
.NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...
这是我一个抠图程序发送请求时专用的jar,maven仓库不好下载,我就上传到csdn,以便下次可以继续使用
例如,在HttpClient 3.x中,代码可能会使用`***mons.httpclient.HttpClient`类和`***mons.httpclient.methods.GetMethod`等,而在4.x版本中,这些都被新的API所替代。程序员需要熟悉`org.apache....
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.PostMethod;
首先,HttpClient虽然强大且功能齐全,但其基础使用往往需要编写大量的重复代码,如创建实例、设置请求头、处理响应等。为了提高开发效率和代码可读性,开发者通常会对其进行封装,Starget.Http就是这样一个简化版的...
- **创建HttpClient实例**:使用`HttpClientBuilder`构建器创建HttpClient对象,可以配置连接池大小、超时等参数。 - **构建HttpGet/HttpPost请求**:通过`HttpGet`或`HttpPost`构造HTTP请求,设置URL、方法和请求...
在本文中,我们将深入探讨HttpClient的基本概念、用法以及如何在实际项目中应用。 HttpClient的核心类是`HttpClient`,它代表一个HTTP客户端实例,可以用来发起HTTP请求。另一个关键类是`HttpGet`和`HttpPost`,...
此外,HttpClient还支持异步操作,可以在多线程环境中高效地处理并发请求。 2. **httpcore-4.4.12.jar**:这是HttpClient的核心库,包含了HTTP协议的基本组件,如连接管理、请求和响应模型、编码器和解码器等。...
httpclient-4.4.5.jar最新JAR下载dowonloaddowonloaddowonloaddowonloaddowonload
《Apache Commons HttpClient 3.1:HTTP客户端编程的基石》 ...然而,需要注意的是,HttpClient 3.1已不再维护,最新的稳定版本为HttpClient 4.x,对于新项目建议使用更现代的版本以获取更好的性能和兼容性。
本资源"HttpClient依赖jar包.zip"包含了实现这些功能所需的jar文件,使得开发者能够方便地在Java项目中集成HttpClient库。 HttpClient库的核心功能包括: 1. **发起HTTP/HTTPS请求**:HttpClient允许开发者发送...
《Android开发中的HttpClient详解及其应用》 在Android应用程序开发中,网络通信是不可或缺的一部分,而Apache HttpClient库则是实现网络请求的常用工具之一。本篇文章将深入解析`httpclient-4.3.6.jar`包,它是...
httpclient-4.5.13-sources.jar
httpclient-4.5所需jar包,里面包含httpclient-4.5.jar等等10个必须的开发包。 1.commons-codec-1.9.jar 2.commons-logging-1.2.jar 3.fluent-hc-4.5.jar 4.httpclient-4.5.jar 5.httpclient-cache-4.5.jar 6....
HttpClient 4.13版本是这个库的一个较新版本,包含了一系列的改进和修复。 在Java开发中,HttpClient是一个常用的工具,尤其在处理Web服务或者API调用时。它支持同步和异步操作,可以处理复杂的HTTP协议细节,使...