2011-12-14 100 views
0

我的問題是,我從服務器得到0字節的響應(我使用Fiddler2來檢查了這一點)。我不能在PHPBB3論壇創建線程

圖片: wtf

我在做什麼。

  1. 登錄我得到的餅乾。
  2. 創建線程

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 

我不知道是怎麼回事上。如果你會幫助我,我將不勝感激。我很抱歉我的英語。

+0

你怎麼在提琴手看到當你試圖創建從phpbb3的網站上線? – 2011-12-14 23:39:09

+0

您沒有得到0字節的響應,您的響應正文長度爲0,由Content-Length標頭標識 – CodeCaster 2011-12-14 23:51:07

回答

2

我發現它爲什麼沒有創建線程。它檢查:

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

如果你不想成爲一個機器人,然後你在發送POST之前等待如8-秒時:

Thread.Sleep(8100); 

它解決了所有的問題對我來說。

1

它返回狀態代碼302 Found,這意味着服務器正在嘗試將您重定向到另一個頁面(在您的示例中爲「http://stuff.com/games.html」)。

+0

是的,但我沒有創建線程:) – carck3r 2011-12-14 23:51:32

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