|
|
今天公司也没什么事,又要开始学习了。其实我写这篇文章,说不定技术是很低级的,而且很多东东也是学习人家的,不过,就当做事我学习的见证。毕竟刚一出来的学生,还不懂得那么多,让大家见证我的成长历程了。
好了,废话不多说了,尽管这也是废话。
WebClient类,在C#和Delphi中都存在,可以实现post数据提交到服务端,就是模拟你手工输入到表单,然后登陆。这里我比较关心的问题是,java自带的没有这么好的类,不过不用悲观,原来common是下有个httpClient类,可以借用这个类来实现类似的功能。
首先来进行一步步解析吧:
1.找个http/https抓包工具。我这里使用了HttpWatch。先打开www.126.com这个登录页面,你可以先用一个正确的账号登录,然后通过HttpWatch来查看一些信息:如:
我们可以提取,post的地址和请求参数的格式。这里分别为:
POST地址:
http://reg.163.com/logins.jsp?type=1&product=mail126&url=http://entry.mail.126.com/cgi/ntesdoor?hid%3D10010102%26lightweight%3D1%26verifycookie%3D1%26language%3D0%26style%3D-1
请求参数格式:
[email=domain=126.com&language=0&bCookie=&username=jiangshan@126.com&savelogin=&url2=http%3A%2F%2Fmail.126.com%2Ferrorpage%2Ferr_126.htm&user=jiangshan_111&password=4444444&style=-1&secure=&enter.x=%B5%C7%A1%A1%C2%BC]domain=126.com&language=0&bCookie=&username=jiangshan@126.com&savelogin=&url2=http%3A%2F%2Fmail.126.com%2Ferrorpage%2Ferr_126.htm&user=jiangshan_111&password=4444444&style=-1&secure=&enter.x=%B5%C7%A1%A1%C2%BC[/email]
下一步使用WebClient类吧:
namespace MySpace {using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;public class TestLogin{public static void Main(string[] args){string postUrl = @" @"http://reg.163.com/logins.jsp?type=1&product=mail126&url=http://entry.mail.126.com/cgi/ntesdoor?hid%3D10010102%26lightweight%3D1%26verifycookie%3D1%26language%3D0%26style%3D-1";";string postVal = @"";//自己写吧 byte[] postData = System.Text.Encoding.ASCII.GetBytes(postVal);byte[] returnVal = _client.UploadData(url, postData);Console.WriteLine("Return:" + System.Text.Encoding.UTF8.GetString(returnVal));Console.ReadLine();}}}
结果:

下次讲 java的实现,88 |
|