我无法在PHPBB3论坛上创建线程

时间:2011-12-14 23:19:50

标签: c# phpbb3

我的问题是我从服务器得到0字节响应(我正在使用Fiddler2来检查它)。

照片: wtf

我在做什么:

  1. 登录。我收到了cookies。
  2. 创建主题

  3. public void CreateTopic(string subject, string message, string forumId)
        {
            HttpWebResponse response = null;
            string source = string.Empty;
            string lastClick= string.Empty;
            string creationTime= string.Empty;
            string formToken = string.Empty;
    
            // GET
            while(true)
            {
                webRequest =
                    (HttpWebRequest) HttpWebRequest.Create(Url + "posting.php?mode=post&f=" + forumId + "&sid=" + sid);
                webRequest.KeepAlive = true;
                webRequest.Method = "GET";
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.Host = Url.Replace("http://", "").Replace("/", "");
                webRequest.CookieContainer = cookieJar;
    
                ServicePointManager.Expect100Continue = false;
    
                try
                {
                    response = (HttpWebResponse) webRequest.GetResponse();
                    UpdateSid(Url + "posting.php?mode=post&f=" + forumId + "&sid=" + sid);
                }
                catch (Exception ex)
                {
                    continue;
                }
                break;
            }
    
            StreamReader streamReader = new StreamReader(response.GetResponseStream());
            source = streamReader.ReadToEnd();
            streamReader.Close();
    
            response.Close();
    
            // Get stuff
            // last click
            Match lastClickMatch = Regex.Match(source, "name=\"lastclick\" value=\"([0-9]{10})\" />");
            if (lastClickMatch.Success) lastClick = lastClickMatch.Groups[1].Value;
    
            // creation time
            Match creationTimeMatch = Regex.Match(source, "name=\"creation_time\" value=\"([0-9]{10})\" />");
            if (creationTimeMatch.Success) creationTime = creationTimeMatch.Groups[1].Value;
    
            // form token
            Match formTokenMatch = Regex.Match(source, "name=\"form_token\" value=\"(.{40})\" />");
            if (formTokenMatch.Success) formToken = formTokenMatch.Groups[1].Value;
    
            // POST
            webRequest = (HttpWebRequest)WebRequest.Create(Url + "posting.php?mode=post&f=" + forumId + "&sid=" + sid);
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.Host = Url.Replace("http://", "").Replace("/", "");
            webRequest.CookieContainer = cookieJar;
            string data = "icon=&subject=" + Encode(subject) + "&addbbcode20=100&message=" + Encode(message) + "&attach_sig=on&post=Submit&lastclick=" + lastClick + "&creation_time=" + creationTime + "&form_token=" + formToken;
    
            byte[] byte1 = Encoding.UTF8.GetBytes(data);
            webRequest.ContentLength = byte1.Length;
    
            ServicePointManager.Expect100Continue = false;
    
            Stream stream = webRequest.GetRequestStream();
            stream.Write(byte1, 0, byte1.Length);
            stream.Close();
    
            response = (HttpWebResponse)webRequest.GetResponse();
    
            UpdateSid(Url + "posting.php?mode=post&f=" + forumId + "&sid=" + sid);
    
            response.Close();
        }
    

    我在小提琴手上得到这个: RAW:

    POST http://stuff.com/posting.php?mode=post&f=8&sid=6d278be1e705fe0261f253bbc96ab7a4
    HTTP/1.1 Content-Type: application/x-www-form-urlencoded 
    Host: stuff.com 
    Cookie: phpbb3_goeyz_u=55443;phpbb3_goeyz_k=;phpbb3_goeyz_sid=6d278be1e705fe0261f253bbc96ab7a4 
    Content-Length: 165
    
    icon=&subject=g&addbbcode20=100&message=d&attach_sig=on&post=Submit&lastclick=1323904393&creation_time=1323904393&form_token=b81c23e308f0bd3a0a73907efcc8c18e5dba0f7f
    

    回复RAW:

    HTTP/1.1 302 Found 
    Date: Wed, 14 Dec 2011 23:13:14 GMT 
    Server: Apache/2.2.14 (Ubuntu) 
    X-Powered-By: PHP/5.3.2-1ubuntu4.10 
    Location: http://stuff.com/games.html 
    Vary: Accept-Encoding
    Content-Length: 0 
    Connection: close 
    Content-Type: text/html
    

    我不知道发生了什么事。如果你能帮助我,我将不胜感激。对不起我的英语。

3 个答案:

答案 0 :(得分:3)

我在phpBB 3.0.9的源代码中找到了这个片段:

203  // Check permissions
204  if ($user->data['is_bot'])
205  {
206      redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
207  }

所以他们可能会在这里拉你一招。你确定你被允许做你想做的事吗?

无论如何,我想您可能想要更改user agent

webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7";

这可能有助于不被识别为机器人,这可能是因为默认UserAgent值为null而发生。

答案 1 :(得分:2)

我发现为什么它没有创建线程。它检查:

if ($user->data['is_bot'])

如果你不想成为机器人,那么在发送POST之前你必须等待8秒钟:

Thread.Sleep(8100);

它为我解决了所有问题。

答案 2 :(得分:1)

它返回的状态代码为302 Found,这意味着服务器正在尝试将您重定向到另一个页面(在您的示例中为“http://stuff.com/games.html”)。