2017-02-22 80 views
1

我有一個WebRequest在C#,我試圖用來從Instagram檢索數據。 WebRequest拋出The remote server returned an error: (403) Forbidden.,但cURL命令返回HTML。實際上,我的POST表單數據會更長,並返回JSON。C#WebRequest但不cURL給出錯誤403

C#

 String uri = "https://www.instagram.com/query/"; 
     var request = (HttpWebRequest)WebRequest.Create(uri); 
     request.Method = "POST"; 

     string postData = "q=ig_user(1118028333)"; 
     ASCIIEncoding encoding = new ASCIIEncoding(); 
     byte[] byte1 = encoding.GetBytes(postData); 

     // Set the content type of the data being posted. 
     request.ContentType = "application/x-www-form-urlencoded"; 

     // Set the content length of the string being posted. 
     request.ContentLength = byte1.Length; 


     using (var dataStream = request.GetRequestStream()) 
     { 
      dataStream.Write(byte1, 0, byte1.Length); 
     } 

     try 
     { 
      var x = (HttpWebResponse)request.GetResponse(); 
     } 
     catch (WebException wex) 
     { 
      String wMessage = wex.Message; 
     } 

拋出錯誤403

捲曲(在Windows中)

curl "https://www.instagram.com/query/" --data "q=ig_user(1118028333)" 

返回HTML。

FireFox的請求體,方法= POST,無頭

q=ig_user(1118028333) 

返回HTML

爲什麼會產生的WebRequest拋出錯誤403,但不捲曲或Firefox?我還有什麼可以在C#中獲取數據?

回答

1

爲什麼WebRequest會拋出錯誤403,而不是cURL或FireFox?

我想你會感到困惑。我之所以這麼假設,是因爲我只是試着對Postman做同樣的事情,而當我得到一個HTML響應時,我也得到了403響應狀態碼。我想你可能不會關注cUrl的迴應代碼。見下面

enter image description here

我還能在C#中做的就是數據?

通常情況下,我嘗試使用System.Net.Http.HttpClient類,這樣我就可以先檢查狀態碼拋出異常之前,我甚至可以檢索響應內容(如果有的話)即使響應代碼大於400 (錯誤響應)

try 
{ 
    var client = new HttpClient(); 
    var response = await client.GetAsync(url); 

    if (response.IsSuccessStatusCode) 
    { 
     var json = await response.Content.ReadAsStringAsync(); 
    } 
    else 
    { 
     string content = null; 

     if (response.Content != null) 
     { 
      content = await response.Content.ReadAsStringAsync(); 
     } 
    } 

} 
catch (Exception ex){}