2012-11-23 80 views
2

我試圖模擬使用WebClient的發佈請求;然而,當在使用Firefox和調試與螢火蟲的請求記錄我發現後POST請求,它會自動做一些GET請求,同時使用我的代碼只能做POST請求模擬完整的發佈請求

我的代碼

//Handler is an overridden WebClient Class 
     private async Task<byte[]> Post(string uri, string[] data) 
     { 
      var postData = new NameValueCollection(); 

      foreach (var info in data.Select(var => var.Split('='))) 
      { 
       postData.Add(info[0], info[1]); 
      } 

      return await Handler.UploadValuesTaskAsync(new Uri(uri), postData); 
     } 
+0

也許服務器正在發送301/302重定向響應,導致客戶端執行GET? – usr

+0

不是所有的迴應都是200 OK但瀏覽器正在執行那些GET ... –

回答

1

我知道這不是你要求的,而是在VB中,但希望它能幫助你指出正確的方向。這是我用來在我們的某個網站上發佈帖子的請求。它適用於模擬POST數據,希望您可以將其中的一些內容納入您正在做的事情中。

Dim postData As String = String.Format("RedirectLocation=RequestMethod=&username={0}&password={1}", _username, _password) 

    Dim _loginRequest As HttpWebRequest = WebRequest.Create(loginurl) 

      With _loginRequest 
       .Method = "POST" 
       .ContentLength = postData.Length 
       .ContentType = "application/x-www-form-urlencoded"       
       .KeepAlive = True 
       .AllowAutoRedirect = False 

       .CookieContainer = New CookieContainer 

       Using writer As New StreamWriter(.GetRequestStream) 
        writer.Write(postData) 
       End Using 
       .Timeout = tsTimeOut.TotalMilliseconds 
       _loginResponse = .GetResponse() 
      End With 
+0

我非常感謝您的回放,並且很樂意幫忙,但是看起來您正在禁用自動重定向,遠不是我需要實現的內容 –

+0

我試圖強調的一部分,我應該做得更好一點,就是'使用writer作爲新的StreamWriter(.GetRequestStream)',在這裏我將發佈的數據寫入Request Stream – pinkfloydx33