2014-07-22 122 views
0

我對HTTP協議相當陌生,但我正在研究它以便能夠自動認爲C#控制檯應用程序在Twitter上創建一個新帳戶。 我在做什麼,首先是做一個GET請求,以便收集頁面上的一些數據(例如真實性標記),然後我將數據發佈到爲其設計的特定URL。我用於GET操作的URL是「https://www.twitter.com/signup/關於HTTP協議

然後我執行POST操作,提供所有必需的標題(Cookie除外,我不知道該Cookie對於該過程是否重要)以及我想要創建的帳戶的格式化數據。

問題是:當我開始我的程序時,首先它不創建任何帳戶,然後服務器回答我重新導向回到www.twitter.com/account/new,感覺我沒有填寫正確的領域,但我不知道什麼是真正發生的事情。

這是我的主要代碼:

static void Main(string[] args) 
     { 
      // Set up data info 
      string[] infos = SetUpAccountInfo(); 
      string parsedData= FormDataParsing(infos); 

      StreamWriter myWriter = null; 
      StreamReader myReader = null; 
      CookieContainer cookies = new CookieContainer(); 

      HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(POSTSignUpURL); 
      objRequest.Method = "POST"; 
      objRequest.Host = "twitter.com"; 
      objRequest.ProtocolVersion = HttpVersion.Version11; 
      objRequest.ContentLength = machin.Length; 
      objRequest.ContentType = "application/x-www-form-urlencoded"; 
      objRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; 
      objRequest.Headers.Add("accept-encoding", "gzip,deflate,sdch"); 
      objRequest.Headers.Add("accept-language", "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4"); 
      objRequest.Headers.Add("cache-control", "max-age=0"); 
      objRequest.Headers.Add("origin", "https://twitter.com"); 
      objRequest.Referer = "https://twitter.com/signup"; 
      objRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"; 
      System.Net.ServicePointManager.Expect100Continue = false; 
      objRequest.CookieContainer = cookies; 

      try 
      { 
       myWriter = new StreamWriter(objRequest.GetRequestStream()); 
       myWriter.Write(parsedData); 


      } 
      catch (Exception e) 
      { 
       // return e.Message; 
      } 
      finally 
      { 
       myWriter.Close(); 

      } 

      HttpWebResponse response = objRequest.GetResponse() as HttpWebResponse; 
      using (StreamReader sr = 
       new StreamReader(response.GetResponseStream())) 
      { 
       string result = sr.ReadToEnd(); 
       HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
       document.LoadHtml(result); 

       // Close and clean up the StreamReader 
       sr.Close(); 
      } 



     } 

回答