- 浏览: 349328 次
- 来自: NA
-
文章分类
最新评论
-
上官车月:
实验成功,转载了
Java获取请求客户端的真实IP地址 -
url_nc:
very good
css教程–十步学会用css建站(全) -
hiveer:
楼主我想问能不能不在class里面定义get_binding ...
强大的ruby模版:ERB -
ilovebaby0530:
修改密码后需要 FLUSH PRIVILEGES;
绿色版mysql安装步骤 -
albrich:
你这个方法也是不行的,得到的仍然是内网的IP
Java获取请求客户端的真实IP地址
http://blog.jiexoo.com/2008/05/21/%e7%94%a8httpclient%e8%8e%b7%e5%8f%96hotmail%e8%81%94%e7%b3%bb%e4%ba%ba%e5%88%97%e8%a1%a8/
第一步,用HttpClient访问http://login.live.com/login.srf?id=2,这个页面会返回一个登录表单
第二步,解析出form中所有的隐含变量和form的action,这些变量是你必须要通过httpClient Post回去,hotmail服务器会验证这些参数,另外,你还必须传递一个PwdPad变量,它的值是IfYouAreReadingThisYouHaveTooMuchFreeTime 从后面截取登录密码长度的值,比如你的密码是123,则PwdPad的值是IfYouAreReadingThisYouHaveTooMuchFreeT
第三、为了知道你接下来导向的地址,你必须解析服务器给你返回的脚本,其中relpace(”***”)中的***即为重定向的地址
第四、得到上一步重定向后的真实的主机地址,联系人列表页面的具体地址就是http://+ hostAddress + /mail/GetContacts.aspx
第五、用正则表达式解析此页面即可
具体代码如下:
冷。。。brutal force。。。
第一步,用HttpClient访问http://login.live.com/login.srf?id=2,这个页面会返回一个登录表单
第二步,解析出form中所有的隐含变量和form的action,这些变量是你必须要通过httpClient Post回去,hotmail服务器会验证这些参数,另外,你还必须传递一个PwdPad变量,它的值是IfYouAreReadingThisYouHaveTooMuchFreeTime 从后面截取登录密码长度的值,比如你的密码是123,则PwdPad的值是IfYouAreReadingThisYouHaveTooMuchFreeT
第三、为了知道你接下来导向的地址,你必须解析服务器给你返回的脚本,其中relpace(”***”)中的***即为重定向的地址
第四、得到上一步重定向后的真实的主机地址,联系人列表页面的具体地址就是http://+ hostAddress + /mail/GetContacts.aspx
第五、用正则表达式解析此页面即可
具体代码如下:
import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.lang.StringUtils; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.util.List; import java.util.ArrayList; import java.util.Arrays; import java.io.InputStream; import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; /** * User: cjp * Date: 2008-4-30 * Time: 9:26:58 */ public class HotmailImporter { public static String[] parseContact(String loginname, String password) throws Exception { HttpClient client = new HttpClient(); client.getParams().setCookiePolicy( CookiePolicy.BROWSER_COMPATIBILITY); //获取登录页面html String hotmailUrl = “http://login.live.com/login.srf?id=2“; GetMethod hotmailGet = new GetMethod(hotmailUrl); hotmailGet.setRequestHeader(”Accept”, “image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*”); hotmailGet.setRequestHeader(”Accept-Language”, “zh-cn”); hotmailGet.setRequestHeader(”User-Agent”, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 2.0.50727)”); hotmailGet.setRequestHeader(”Host”, “www.hotmail.com“); hotmailGet.setRequestHeader(”Connection”, “Keep-Alive”); client.executeMethod(hotmailGet); String responseStr = hotmailGet.getResponseBodyAsString(); hotmailGet.releaseConnection(); //传递所有的cookie Cookie[] cookies = client.getState().getCookies(); String cookieStr = “”; for (Cookie cookie : cookies) { cookieStr += cookie.getName() + “=” + cookie.getValue() + “;”; } //分析登录页面的HTML,获取action,ppsx,ppft String actionUrl = getFormUrl(responseStr); NameValuePair loginPair = new NameValuePair(”login”, loginname); NameValuePair loginOptionsPair = new NameValuePair(”LoginOptions”, “2″); NameValuePair passwdPair = new NameValuePair(”passwd”, password); NameValuePair ppsxPair = new NameValuePair(”PPSX”, getInputValue(”ppsx”, responseStr)); NameValuePair ppftPair = new NameValuePair(”PPFT”, getInputValue(”ppft”, responseStr)); //算出pwdpad String pwdpad = “IfYouAreReadingThisYouHaveTooMuchFreeTime”; pwdpad = StringUtils.substring(pwdpad, 0, pwdpad.length() - password.length()); NameValuePair pwdpadPair = new NameValuePair(”PwdPad”, pwdpad); PostMethod loginPost = new PostMethod(actionUrl); loginPost.setRequestBody(new NameValuePair[]{loginPair, passwdPair, ppsxPair, ppftPair, loginOptionsPair, pwdpadPair}); loginPost.setRequestHeader(”Accept”, “image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*”); loginPost.setRequestHeader(”Referer”, hotmailGet.getURI().toString()); loginPost.setRequestHeader(”Accept-Language”, “zh-cn”); loginPost.setRequestHeader(”User-Agent”, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 2.0.50727)”); loginPost.setRequestHeader(”Host”, “login.live.com”); loginPost.setRequestHeader(”Connection”, “Keep-Alive”); loginPost.setRequestHeader(”Cache-Control”, “no-cache”); loginPost.setRequestHeader(”Cookie”, cookieStr); client.executeMethod(loginPost); String str = loginPost.getResponseBodyAsString(); loginPost.releaseConnection(); String toUrl = StringUtils.substringBetween(str, “replace(\”", “\”);}function OnBack()”); //获取登录后的跳转页面 GetMethod getMethod = new GetMethod(toUrl); client.executeMethod(getMethod); //获取联系人列表 GetMethod contactMethod = new GetMethod(”http://” + getMethod.getURI().getHost() + “/mail/GetContacts.aspx”); getMethod.releaseConnection(); client.executeMethod(contactMethod); List<String> contacts = parseContacts(contactMethod.getResponseBodyAsStream()); contactMethod.releaseConnection(); //noinspection ToArrayCallWithZeroLengthArrayArgument return contacts.toArray(new String[]{}); } private static List<String> parseContacts(InputStream contactsContent) throws IOException { List<String> contacts = new ArrayList<String>(); BufferedReader in = new BufferedReader(new InputStreamReader(contactsContent)); String line; while ((line = in.readLine()) != null) { System.out.println(line); String[] values = line.split(”,”); if (values.length < 47) continue; String email = parseValue(values[46]); if (email.length() == 0) continue; email = email.toLowerCase(); if (isEmailAddress(email)) { contacts.add(email); } } return contacts; } private static String parseValue(String value) { if (value.length() > 0 && value.charAt(0) == ‘”‘) { value = value.substring(1, value.length() - 1); } return value; } private static String getFormUrl(String content) throws Exception { content = content.substring(content.indexOf(”<form”) + 5); String actionAttribute = content.split(”\\s+”)[5]; Pattern p = Pattern.compile(”\”(.*?)\”"); Matcher matcher = p.matcher(actionAttribute); if (!matcher.find()) { throw new Exception(”hotmail登录界面已改变,无法正常解析”); } return matcher.group(1); } private static String getInputValue(String name, String content) throws Exception { Pattern p = Pattern.compile(”^.+value=\”([^\\s\"]+)\”"); int index = content.indexOf(name.toUpperCase()) + name.length() + 2; content = content.substring(index, index + 200 > content.length() ? content.length() : index + 200); Matcher matcher = p.matcher(content); if (!matcher.find()) { throw new Exception(”hotmail登录界面已改变,无法正常解析”); } return matcher.group(1); } public static boolean isEmailAddress(String email) { Pattern emailPattern = Pattern.compile( “^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$” ); return emailPattern.matcher(email).matches(); } public static void main(String[] args) { try { String[] contacts = parseContact(”test@live.cn“, “test”); System.out.println(Arrays.toString(contacts)); } catch (Exception e) { e.printStackTrace(); } } }
评论
9 楼
gyqxaytsz
2012-02-06
gyqxaytsz 写道
你这个程序的正则表达式都有问题吧?都需要改啊
8 楼
gyqxaytsz
2012-02-06
你这个程序的正则表达式都有问题吧?
7 楼
gyqxaytsz
2012-02-03
终于可以运行了,但是得不到任何结果啊,是个空值
6 楼
gyqxaytsz
2012-02-02
java.lang.IllegalArgumentException: host parameter is null
at org.apache.commons.httpclient.HttpConnection.setHost(HttpConnection.java:248)
at org.apache.commons.httpclient.SimpleHttpConnectionManager.getConnectionWithTimeout(SimpleHttpConnectionManager.java:163)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:152)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
at hotMailTest.hotMail.parseContact(hotMail.java:86)
at hotMailTest.hotMail.main(hotMail.java:167)
at org.apache.commons.httpclient.HttpConnection.setHost(HttpConnection.java:248)
at org.apache.commons.httpclient.SimpleHttpConnectionManager.getConnectionWithTimeout(SimpleHttpConnectionManager.java:163)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:152)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
at hotMailTest.hotMail.parseContact(hotMail.java:86)
at hotMailTest.hotMail.main(hotMail.java:167)
5 楼
gyqxaytsz
2012-02-02
java.lang.Exception: hotmail登录界面已改变,无法正常解析
at hotMailTest.hotMail.getInputValue(hotMail.java:137)
at hotMailTest.hotMail.parseContact(hotMail.java:52)
---->NameValuePair ppsxPair = new NameValuePair("PPSX", getInputValue("ppsx", responseStr));
at hotMailTest.hotMail.main(hotMail.java:149)
---->String[] contacts = parseContact(”test@live.cn“, “test”);
at hotMailTest.hotMail.getInputValue(hotMail.java:137)
at hotMailTest.hotMail.parseContact(hotMail.java:52)
---->NameValuePair ppsxPair = new NameValuePair("PPSX", getInputValue("ppsx", responseStr));
at hotMailTest.hotMail.main(hotMail.java:149)
---->String[] contacts = parseContact(”test@live.cn“, “test”);
4 楼
gyqxaytsz
2012-02-02
有现在还能用的吗?提示hotmail登录界面已改变,无法正常解析
还有需要导入的jar包都有那些啊?我导了4个包不知道对不对:
commons-logging-1.0.4.jar
commons-lang-2.3.jar
commons-httpclient-3.0.1.jar
commons-codec-1.6.jar
不知道我导入的全不全或者有多余的?希望指点一下,谢谢!!
还有需要导入的jar包都有那些啊?我导了4个包不知道对不对:
commons-logging-1.0.4.jar
commons-lang-2.3.jar
commons-httpclient-3.0.1.jar
commons-codec-1.6.jar
不知道我导入的全不全或者有多余的?希望指点一下,谢谢!!
3 楼
zhangrl666
2008-12-05
log4j:WARN No appenders could be found for logger (org.apache.commons.httpclient.HttpClient).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.Exception: hotmail登录界面已改变,无法正常解析
at com.test001.email.HotmailImporter.getInputValue(HotmailImporter.java:125)
at com.test001.email.HotmailImporter.parseContact(HotmailImporter.java:49)
at com.test001.email.HotmailImporter.main(HotmailImporter.java:146)
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.Exception: hotmail登录界面已改变,无法正常解析
at com.test001.email.HotmailImporter.getInputValue(HotmailImporter.java:125)
at com.test001.email.HotmailImporter.parseContact(HotmailImporter.java:49)
at com.test001.email.HotmailImporter.main(HotmailImporter.java:146)
2 楼
yxl0917
2008-09-07
没有能够正确的运行呀
1 楼
lordhong
2008-05-22

发表评论
-
[转]电子商务名词介绍
2010-10-19 14:11 1471电子商务介绍: 概念:电子商务,英文名Elect ... -
[转]如何用数字判断一个网站
2010-10-19 14:05 12181.访问量:alexa,chinaz查询工具。 ... -
apache的ab命令做压力测试
2009-11-23 17:57 210601. 最基本的关心两个选项 -c -n 例: ./ab -c ... -
您不得不看 apache添加模块(不重新编译)
2009-10-27 00:25 5994下面是使用apxs 工具给apache添加模块 添加的 ... -
什么是Session, 什么是Cookie?
2009-09-22 15:42 4069什么是Session, 什么是Cookie? Session ... -
HTTP协议分析之一:HTTP协议详解
2009-07-20 13:41 2963HTTP(HyperTextTransferProtocol) ... -
HTTP分析之二:标准状态代码
2009-07-20 13:40 1341Number Description ... -
一个ApacheBench (ab) 的简单的 httpd 压力测试例子+结果说明
2009-01-21 00:14 1947/* 在这个例子的一开始,我执行了这样一个命令 ab ... -
请问在jsp页面里怎么得到本页面的url
2009-01-19 15:07 1963假如该页面是http://a.jsp,, 如何在a ... -
HTTP 状态代码
2008-12-09 13:20 949HTTP 状态代码 如果某项请求发送到您的服务器要求显示您 ... -
文字自动换行
2008-10-20 00:59 1642对想让其中文字自动换行的DIV添加以下样式 C代码 ... -
Apache
2008-10-17 19:05 1260SOS,spark!xxx网站打开奇慢,快点给看看,赶紧帮个忙 ... -
大型网站架构演变和知识体系
2008-10-10 11:03 1329之前也有一些介绍大型网站架构演变的文章,例如 LiveJo ... -
最简单的表格样式写法
2008-10-07 02:34 2627<style> table{ bor ... -
轻松制作Favicon
2008-09-05 15:38 1661看到那些Web2.0站点的图标了吧,比如饭否 ( ),鲜果 ... -
网页head区常用代码
2008-08-26 04:25 1076公司版权注释 <!--- the site is de ... -
java获取msn好友列表
2008-08-12 01:11 2198基于 JMSN 写了一个 MsnHelper 。借助getBu ... -
在myeclipse环境下创建天乙论坛项目
2008-08-07 15:35 21981,首先下载bbscs_8_0_0.rar,解压缩,比如我解 ... -
Java获取请求客户端的真实IP地址
2008-08-07 12:20 6891通常通过request.getRemoteAddr() 取得 ... -
好产品靠的是设计(中文版)
2008-08-06 12:23 1422我从不认为好的产品是偶然设计出来的,我在几乎所有好的产品诞生的 ...
相关推荐
标题中的“httpclient 获取技术博客列表”指的是使用Apache HttpClient库来获取网络上的技术博客列表。HttpClient是一个Java库,它提供了一种丰富的API来执行HTTP请求,包括GET、POST等方法,用于从网页抓取数据。在...
通过httpclient post去获取,response返回码是302,返回的code放在header的Location中。 请求的时候client_id,response_type,redirect_uri,state拼接在url后面,account和password放在body表单(x-...
android HttpClient 获取网络图片 实例
本篇文章将深入探讨如何使用`HttpClient`来获取网络资源,以及处理返回的XML数据。 首先,我们需要了解`HttpClient`的基本用法。在Java中,创建一个`HttpClient`实例是获取网络资源的第一步。`HttpClient`提供了...
在这个场景中,我们使用HttpClient来调用远程接口,从电信公司的网站获取可用的新手机号码信息,并将这些数据存储到本地文件中。以下是对这个过程的详细解释: 1. **HttpClient的基本使用**: HttpClient提供了一...
通过分析这些请求,开发者可以找到数据接口,并使用HttpClient来模拟这些请求,获取到动态加载的数据。 在本例中,我们通过Jsoup获取到了京东商品页面的静态HTML代码,但价格信息并未包含在内。通过分析页面源码...
在Android Studio中,由于早期版本的HttpClient已被弃用,因此需要添加依赖: ```xml dependencies { implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1' } ``` 接下来,我们创建一个...
从网络获取数据和图片,用gson解析并用listview展示
本篇文章将深入探讨如何在Android源码中使用HttpClient库来获取网页。HttpClient是Apache的一个开源项目,提供了强大的HTTP客户端功能,使得开发者能够方便地进行网络通信。 首先,我们需要在Android项目中引入...
首先,我们来看`HttpClient`的使用。Apache HttpClient是一个强大的HTTP客户端库,它提供了丰富的功能来处理HTTP请求和响应。在Android 2.3.3版本中,HttpClient是官方推荐的网络通信方式。下面是一段基本的使用示例...
HttpClient的使用方法可能包括创建一个HttpClient实例,设置请求方法(GET、POST等)、URL、请求头、查询参数或请求体,然后发送请求并接收响应。响应对象通常会包含状态码、头部信息和响应体,可以从中提取出需要的...
本教程将专注于使用Apache HttpClient库获取网络数据,然后使用Google的Gson库解析JSON格式的数据。这是一个基础但重要的技能,对于任何想要与服务器进行交互的开发者来说都是必备的。 首先,我们需要了解`...
用户提供邮箱帐号和密码,获取该邮箱联系人列表: 方法1:利用各邮箱官方开放的API接口,连接到邮箱服务器;(国外大部分邮箱支持) 方法2:利用httpclient模拟登录邮箱,抓取联系人页面的源代码---------使用http...
在本文中,我们将深入探讨HttpClient的核心概念、使用方法以及如何通过`httpclient.jar`进行实战应用。 首先,HttpClient的主要组件包括: 1. **HttpClient实例**:这是整个HTTP通信的核心,负责管理连接、请求和...
httpClient获取json格式的数据,并将数据赋值与自动化测试平台
### 使用HttpClient发送POST请求,并获取响应内容 #### 一、简介 在现代软件开发中,尤其是在Web应用领域,客户端与服务器之间的通信是非常重要的环节。Java作为一种广泛应用的编程语言,提供了多种方式来实现这一...
首先,使用HttpClient发起HTTP请求并获取响应,然后将响应内容传递给HtmlParser进行解析。例如: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(...
此外,由于Android API Level 23后已弃用HttpClient,推荐使用`HttpURLConnection`或第三方库如OkHttp进行网络请求。 总结一下,通过HTTPClient获取JSON数据并展示到ListView的主要步骤包括: 1. 使用HTTPClient...
本项目提供了可运行的示例,展示了如何使用HttpClient来获取目标网站内容。 首先,`pom.xml`是Maven项目的配置文件,它包含了项目所依赖的库,如Apache HttpClient库。在`pom.xml`中,你需要确保引入了正确的...
4. **执行请求**:使用HttpClient实例执行请求,并获取HttpResponse对象: ```java HttpResponse response = httpClient.execute(httpGet); ``` 5. **处理响应**:从HttpResponse对象中读取响应状态码和数据。...