2017-06-10 120 views
0

我正在嘗試編寫一個C#腳本,它實際上與通過某個網頁的UI提交表單時的功能相同。這是在不使用Cookie的網站的公開頁面上。我看着在Chrome於在請求/響應會怎麼樣網絡選項卡時,我提交評論 enter image description here模擬網頁表單通過C#提交POST提交

enter image description here

,我試圖效仿,在C#的土地:

    CommentFormData data = CommentFormData.GenerateRandom(); 
        string json = new JavaScriptSerializer().Serialize(data); 
        StringContent content = new StringContent(json, Encoding.UTF8); 
        content.Headers.TryAddWithoutValidation("Accept", "text/javascript, text/html, application/xml, text/xml, */*"); 
        content.Headers.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate, br"); 
        content.Headers.TryAddWithoutValidation("Accept-Language", "en-US,en;q=0.8"); 
        content.Headers.TryAddWithoutValidation("Connection", ";eep-alive"); 
        content.Headers.TryAddWithoutValidation("Content-Length", json.Length.ToString()); 
        content.Headers.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
        content.Headers.TryAddWithoutValidation("Host", "..."); 
        content.Headers.TryAddWithoutValidation("Origin", "..."); 
        content.Headers.TryAddWithoutValidation("Referer", "...); 
        content.Headers.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"); 
        content.Headers.TryAddWithoutValidation("X-Prototype-Version", "1.6.1"); 
        content.Headers.TryAddWithoutValidation("X-Requested-With", "XMLHttpRequest"); 
        HttpResponseMessage response = await client.PostAsync("...", content); 

.....

internal class CommentFormData 
{ 
    public string pageID { get; } = "..."; 
    public string comment { get; set; } 
    public string author { get; set; } 
    public string email { get; set; } 
    public int timezone { get; } = -7; 

    public static CommentFormData GenerateRandom() 
    { 
     return new CommentFormData() 
     { 
      comment = GenerateRandomString(), 
      author = GenerateRandomString(), 
      email = $"{GenerateRandomString()}@gmail.com" 
     }; 
    } 

    private static string GenerateRandomString(int length = 100) 
    { 
     Random random = new Random(); 
     return new string(Enumerable.Repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZ", length) 
      .Select(s => s[random.Next(s.Length)]).ToArray()); 
    } 
} 

我回來狀態代碼200,但它的工作不一樣。我得到的迴應是

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Transfer-Encoding: chunked 
    Connection: keep-alive 
    Keep-Alive: timeout=20 
    Vary: Accept-Encoding 
    Date: Sat, 10 Jun 2017 20:44:36 GMT 
    Server: nginx 
    Content-Type: text/xml; charset=utf-8 
} 

那麼,爲什麼這不工作?有任何想法嗎?

+1

你似乎是編碼你的數據而不是形式編碼的JSON,這是有原因嗎? –

+0

請求內容的序列化類型是否與Content-Type頭匹配? – Jasen

+0

@NickBailey不,這可能是我的問題。讓我看看這是否會解決它... – user7127000

回答