首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#怎么模拟登陆

2012-12-15 
C#如何模拟登陆?点击“登录”按钮会执行以下函数:res loginapi.login(109066557@qq.com, 123456)login

C#如何模拟登陆?
点击“登录”按钮会执行以下函数:


res= loginapi.login("109066557@qq.com", "123456");

login函数定义如下:

public bool login(string username, string password)
{
    public string baseUrl = @"http://api.website.com/";
    DataRequest request = new DataRequest();
    request.paramData = @"?username="+username+@"&password="+password;
    request.RequestURL(baseUrl + "login.php");
    int delay = 5;
    while (request.statusCode!= HttpStatusCode.OK)
    {
        Thread.Sleep(1000);
        delay--;
        if (delay <= 0)
        {
            MessageBox.Show("超时!");
            MessageBox.Show(request.statusCode.ToString());
            return false;
        }
    }
    MessageBox.Show(request.resData);
    return true;
}

DataRequest类定义如下:

public class DataRequest
{
    public string paramData=string.Empty;
    public string resData=string.Empty;
    public string resData = "测试";
    public HttpStatusCode statusCode;
    public Exception errorAsync;
    public static Encoding dataEncode = Encoding.UTF8;
    public void RequestURL(string url)
    {
        statusCode = HttpStatusCode.Created;
        HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(url));
        webReq.Method = "POST";
        webReq.ContentType = "application/x-www-form-urlencoded";
        webReq.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), webReq);
    }
    private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
            Stream postStream = request.EndGetRequestStream(asynchronousResult);
            byte[] byteArray = dataEncode.GetBytes(paramData);
            postStream.Write(byteArray, 0, byteArray.Length);
            postStream.Close();
            request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);


        }
        catch (Exception ee)
        {
            errorAsync = ee;
        }
    }
    private void GetResponseCallback(IAsyncResult asynchronousResult)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
            HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
            Stream streamResponse = response.GetResponseStream();
            StreamReader streamRead = new StreamReader(streamResponse);
            statusCode=response.StatusCode;
            resData = streamRead.ReadToEnd();
            streamResponse.Close();
            streamRead.Close();
        }
        catch (Exception ee) 
        {
            errorAsync = ee;
        }
    }
}


可是并没有传值成功,该如何改呢?
[最优解释]

request.paramData = @"EMAIL="+username+@"&PASSWORD="+password+@"&debug=";
//username是经过url编码的,password是经过md5加密的

[其他解释]
先搞清楚服务器需要什么方式的验证,
可以用fiddler先抓一下正常登陆的情况下header和form是怎么传的参。
[其他解释]
这个只有针对具体的网站抓包分析了。如cookies 值等
[其他解释]
引用:
这个只有针对具体的网站抓包分析了。如cookies 值等

我用fiddler抓包,结果为:
This response did not set any cookies.
This response did not contain a P3P Header.

[其他解释]
引用:
先搞清楚服务器需要什么方式的验证,
可以用fiddler先抓一下正常登陆的情况下header和form是怎么传的参。

我听cuit大神的第一次用fiddler,不太会看,截图如下:

但是看不懂啊。。。。。。
[其他解释]
你可以先看request的header。
[其他解释]
引用:
你可以先看request的header。


看不懂啊,不知道用户名和密码是怎么传的
[其他解释]
点击TextView可以看到
EMAIL=109066557%40qq.com&PASSWORD=e10adc3949ba59abbe56e057f20f883e&debug=
已知登录密码的加密方式是32位MD5小写,
request.paramData = @"EMAIL="+username+@"&password="+password;这句代码该如何改呢?


[其他解释]
如果header里没有什么特别的说明不是用post传递的。
可以看webform里的键值对。
[其他解释]

引用:
如果header里没有什么特别的说明不是用post传递的。
可以看webform里的键值对。

登陆页面的PHP代码如下:

<form method="post" action="http://api.website.com/login.php">
EMAIL<input type="text" name="EMAIL"  />
PASSWORD<input type="text" name="PASSWORD"/>
Debug<input type="text" name="debug"/>
<input type="submit"  value="Login" />
</form>

应该就是用post传递的啊。点击TextView可以看到
EMAIL=109066557%40qq.com&PASSWORD=e10adc3949ba59abbe56e057f20f883e&debug=
已知登录密码的加密方式是32位MD5小写,
我现在就是想知道request.paramData = @"EMAIL="+username+@"&password="+password这句代码该如何改呢? 

热点排行