0 0

httpclient模拟登入email.yahoo.co.jp出现验证码30

我用httpclient模拟登入时出现文字验证,而使用浏览器时则不会, 我用ff查看他的请求信息发现如果没有cookie时会出现文字验证。
请问httpclient怎么处理cookie信息的?
我要跳过文字验证怎么处理?

问题补充:我现在能模拟登入进成功,但是他先会跳到文字验证界面。 如果我用浏览器来登入的话,第一次会进入文字验证界面,但是可在文字验证界面在跳回登入界面登入则可以登入。
我发现里面的cookie信息是在文字验证界面拿到服务器给的cookie提供后续操作。 我的代码也是这样的思路但是服务器不认。 我的q 64912766 。求大神指导

问题补充:哎!
谁知道用什么工具能监听httpclient的请求..
我要监听我写的jar包程序.
2012年8月07日 02:01

3个答案 按时间排序 按投票排序

0 0

我又看了下,从结论说,我投降了。哈哈。

尝试的方向有这么几个

- 设置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
0 0

通过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
0 0

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

相关推荐

    可用org.apache.commons.httpclient-3.1.0.jar.zip

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods....

    commons-httpclient-3.1jar包下载

    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...

    httpclient 4.X版本下载有的带源码包

    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-...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...

    httpclient-4.5.jar

    《深入理解HTTPClient 4.5及其依赖》 在Java编程世界中,HTTPClient是一个非常重要的库,它允许开发者执行HTTP请求并处理响应。本文将深入探讨`httpclient-4.5.jar`这个包,以及它所依赖的相关jar包,帮助你更好地...

    【ASP.NET编程知识】.NET CORE HttpClient的使用方法.docx

    .NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...

    httpclient5-5.0.3.jar

    这是我一个抠图程序发送请求时专用的jar,maven仓库不好下载,我就上传到csdn,以便下次可以继续使用

    HttpClient 3.x to HttpComponents HttpClient 4.x

    例如,在HttpClient 3.x中,代码可能会使用`***mons.httpclient.HttpClient`类和`***mons.httpclient.methods.GetMethod`等,而在4.x版本中,这些都被新的API所替代。程序员需要熟悉`org.apache....

    commons-httpclient-3.1.jar

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.ByteArrayRequestEntity; import org.apache.commons.httpclient.methods.PostMethod;

    httpclient简化封装Starget.Http

    首先,HttpClient虽然强大且功能齐全,但其基础使用往往需要编写大量的重复代码,如创建实例、设置请求头、处理响应等。为了提高开发效率和代码可读性,开发者通常会对其进行封装,Starget.Http就是这样一个简化版的...

    httpclient-4.5.2.jar.zip

    - **创建HttpClient实例**:使用`HttpClientBuilder`构建器创建HttpClient对象,可以配置连接池大小、超时等参数。 - **构建HttpGet/HttpPost请求**:通过`HttpGet`或`HttpPost`构造HTTP请求,设置URL、方法和请求...

    httpclient.jar包下载.zip

    在本文中,我们将深入探讨HttpClient的基本概念、用法以及如何在实际项目中应用。 HttpClient的核心类是`HttpClient`,它代表一个HTTP客户端实例,可以用来发起HTTP请求。另一个关键类是`HttpGet`和`HttpPost`,...

    httpClient组合包.zip

    此外,HttpClient还支持异步操作,可以在多线程环境中高效地处理并发请求。 2. **httpcore-4.4.12.jar**:这是HttpClient的核心库,包含了HTTP协议的基本组件,如连接管理、请求和响应模型、编码器和解码器等。...

    httpclient-4.5.5.jar

    httpclient-4.4.5.jar最新JAR下载dowonloaddowonloaddowonloaddowonloaddowonload

    org.apache.commons.httpclient-3.1.jar

    《Apache Commons HttpClient 3.1:HTTP客户端编程的基石》 ...然而,需要注意的是,HttpClient 3.1已不再维护,最新的稳定版本为HttpClient 4.x,对于新项目建议使用更现代的版本以获取更好的性能和兼容性。

    HttpClient依赖jar包.zip

    本资源"HttpClient依赖jar包.zip"包含了实现这些功能所需的jar文件,使得开发者能够方便地在Java项目中集成HttpClient库。 HttpClient库的核心功能包括: 1. **发起HTTP/HTTPS请求**:HttpClient允许开发者发送...

    httpclient-4.3.6.jar包,安卓异步框架必备

    《Android开发中的HttpClient详解及其应用》 在Android应用程序开发中,网络通信是不可或缺的一部分,而Apache HttpClient库则是实现网络请求的常用工具之一。本篇文章将深入解析`httpclient-4.3.6.jar`包,它是...

    httpclient-4.5.13-sources.jar

    httpclient-4.5.13-sources.jar

    httpclient-4.5jar

    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所需jar包(全) httpClient.4.13jar

    HttpClient 4.13版本是这个库的一个较新版本,包含了一系列的改进和修复。 在Java开发中,HttpClient是一个常用的工具,尤其在处理Web服务或者API调用时。它支持同步和异步操作,可以处理复杂的HTTP协议细节,使...

Global site tag (gtag.js) - Google Analytics