2017-02-22 1 views
1

Instagramからデータを取得するために使用しようとしているC#にWebRequestがあります。 WebRequestはThe remote server returned an error: (403) Forbidden.をスローしますが、cURLコマンドはHTMLを返します。実際には、私のPOSTフォームデータは長くなり、JSONを返します。C#WebRequestではなくエラー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; 
     } 

(Windowsの場合)のcURL

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

返しHTMLエラー403

をスローします。

FireFoxのリクエストボディ、メソッド= POSTは、何のヘッダ

q=ig_user(1118028333) 

返しHTML

なぜWebRequestクラスは、cURLのか、FireFoxのエラー403をスローしませんが、ないでしょうか?データを取得するためにC#で何ができますか?

答えて

1

なぜWebRequestはエラー403をスローしますが、cURLまたはFireFoxはスローしませんか?

あなたは混乱していると思います。なぜなら、私はPostmanと同じことをやってみたのですが、私はHTMLレスポンスを受け取っている間に、私も403レスポンスステータスコードを取得しています。私はあなたがcUrlのレスポンスコードに注意を払っていないかもしれないと思います。私は、データを取得するためにC#で他に何を行うことができます

enter image description here

下記参照?

通常、私は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){} 
関連する問題