无法使用WebClient登录asp.net网站

时间:2012-12-17 00:04:35

标签: c# asp.net webclient

我尝试使用支持Cookie的WebClient在此网站上提交表单: freeclassifieds。 我升级的WebClient:

public class CookieWebClient : WebClient
{
    private readonly CookieContainer container = new CookieContainer();

    public CookieWebClient(CookieContainer container)
    {
        this.container = container;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest res = base.GetWebRequest(address);
        var request = res as HttpWebRequest;
        if (request != null)
        {
            request.CookieContainer = container;
        }
        return res;
    }

    protected override WebResponse GetWebResponse(WebRequest request, IAsyncResult result)
    {
        WebResponse response = base.GetWebResponse(request, result);
        ReadCookies(response);
        return response;
    }

    protected override WebResponse GetWebResponse(WebRequest request)
    {
        WebResponse response = base.GetWebResponse(request);
        ReadCookies(response);
        return response;
    }

    private void ReadCookies(WebResponse r)
    {
        var response = r as HttpWebResponse;
        if (response != null)
        {
            CookieCollection cookies = response.Cookies;
            container.Add(cookies);
        }
    }
}

但是当我尝试提交表单时,我只是被阻止并接收登录页面作为回复。 我检查了登录页面中的cookie和字段,似乎所有内容都已调整好。 成功登录后为什么我无法收到正确的页面?

static void Main(string[] args)
    {
        string link1 = "http://www.freeclassifieds.com/logon.aspx";

        string fileName= @"D:\Dropbox\myProjects\AutoPostMachine\myHtml.html";

        CookieWebClient wc = new CookieWebClient(new CookieContainer());

        NameValueCollection postDataCollection= new NameValueCollection();
        postDataCollection.Add("ctl00$phMain$txtEmail", "myEmail");
        postDataCollection.Add("ctl00$phMain$txtPassword","myPassword");
        postDataCollection.Add("ctl00$phMain$btnLogin","Login");

        wc.Encoding = Encoding.UTF8;
        wc.Credentials = CredentialCache.DefaultCredentials;
        wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        wc.Headers[HttpRequestHeader.Cookie] = "ASP.NET_SessionId=mfqdx1505nnbw3bxws01so12; __utma=19755559.732186057.1355692154.1355692154.1355695835.2; __utmb=19755559.3.10.1355695835; __utmc=19755559; __utmz=19755559.1355692154.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)";

        byte[] byteArr= wc.UploadValues(link1, postDataCollection);
        FileStream fs = new FileStream(fileName, FileMode.Create);
        fs.Write(byteArr, 0, byteArr.Length);

        Process.Start(fileName);
    }

1 个答案:

答案 0 :(得分:0)

如果/当配置正确时,您不能“欺骗”ASP.Net Web表单Postback - MSDN参考:VIEWSTATE and EVENTVALIDATION

相关问题