使用C#模拟登录VBulletin网站

4

我正在尝试编写一个程序(C#),可以登录并在VBulletin论坛中创建新主题。我尝试了两种方法:

1)使用 HttpWebRequest :登录成功,但是创建新主题失败。这是发布代码:

public static void CreateNewThread(string url,string fId, string title, string message, string tag)
    {
        url += "newthread.php?do=postthread";

        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        //string result = "";

        string values = "subject=" + title
                        + "&message=" + message
                        + "&tag=" + tag
                        + "&do=postthread"
                        + "&f=" + fId
                        + "&s="
                        + ""
                        ;

        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ContentLength = values.Length;

        ServicePointManager.Expect100Continue = false; // prevents 417 error

        using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), Encoding.UTF8))
        {
            writer.Write(values);
        }

        HttpWebResponse c = (HttpWebResponse)req.GetResponse();
    }

当执行以上代码时,并没有创建任何线程!
2)使用WebBrowser控件:
 webBrowser1.Document.GetElementById("navbar_username").InnerText = "admin";
 webBrowser1.Document.GetElementById("navbar_password").InnerText = "123";

但是我无法提交,因为表单没有名称/ID,登录按钮也相同!请告诉我如何在没有表单名称/ID和按钮名称/ID的情况下提交表单?

谢谢!

最好的问候,

1个回答

0

尝试模拟POST数据而不是填写表单:

string postData = "username=Kurresmack&password=pw&action=login&url=/";
webBrowser1.Navigate("www.sweclockers.com/forum/member.php", "", System.Text.Encoding.UTF8.GetBytes(postData), "Content-Type: application/x-www-form-urlencoded\r\n");

你好,感谢您的回复!然而,您提供的代码似乎无法正常工作。它只会重定向到member.php,并且状态是未登录的。我在VBB 3x和4x上进行了测试。请检查一下!最好的问候! - Shinichi
你是否更改了数值以匹配你自己的?我使用了完全相同的代码(除了用户名和密码),登录到sweclockers,它非常顺利。 - Oskar Kjellin
这是我的代码:string postData = "username=Admin&password=123456&action=login&url=/"; webBrowser1.Navigate("localhost/vbb4x/member.php", "", Encoding.UTF8.GetBytes(postData), "Content-Type: application/x-www-form-urlencoded\r\n");请告诉我是否有错误!谢谢! - Shinichi
你应该能以同样的方式完成它。只需检查createthread页面上的表单并获取其中所有值。确保你导航到表单的操作。 - Oskar Kjellin
我以同样的方式尝试了,但失败了。因为发布代码无法在登录操作之前获取SecurityToken。这是一个很棒的反垃圾邮件功能 :) - Shinichi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接