2016-09-12 12 views
0

とは異なり、応答だ#のHttpWebRequestが、それは、応答、私は違いの結果を持っているときの取得データを再生してC#のHttpWebRequestと、それは私がCでウェブページをGoogle Playからデータを取得しようとブラウザ

コード:

public const string googlePlayUrl = "https://play.google.com/store/apps/details?id="; 

public void GetData(string packageName) { 
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(googlePlayUrl + packageName)); 
    request.Method = WebRequestMethods.Http.Get; 
    request.ContentType = "text/html"; 
    request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"; 
    request.AutomaticDecompression = DecompressionMethods.GZip; 

    request.BeginGetResponse((IAsyncResult asynchronousResult) => 
    { 
     HttpWebRequest requested = (HttpWebRequest)asynchronousResult.AsyncState; 
     using (HttpWebResponse response = (HttpWebResponse)requested.EndGetResponse(asynchronousResult)) 
     { 
      System.IO.Stream responseStream = response.GetResponseStream(); 
      using (StreamReader reader = new StreamReader(responseStream)) 
      { 
       Console.WriteLine(reader.ReadToEnd()); 
      } 
      responseStream.Close(); 
     } 
    }, request); 
} 

リクエストの接続は問題ありませんが、レスポンスがありますが、ブラウザでWebページにアクセスする場合とは異なります。それは私が、このような

  • div.idアプリタイトル
  • スパンattrの[にitemprop = "ジャンル"]として使用するいかなる要素
  • のdiv ATTR [にitemprop = "説明"]
ません

なぜ、私はそのユーザーエージェントを設定しようとしましたが、まだ動作していないか、あるいは間違って設定している可能性があります。 は、誰かがそのためのソリューションを持って欲しい:)

+0

をだから... ...何を言っているの? HttpWebRequestを使ってダウンロードしたときと同じように、ブラウザからアクセスしたときに同じHTMLを受け取っていませんか? – Falgantil

+0

@BjarkeSøgaardはい –

+0

2つの結果を比較しようとしましたが、違いは何ですか? – Falgantil

答えて

0

あなたのパブリックIPアドレスは、Googleがブロックされていないと仮定すると、以下に示すように、あなたはParallel.ForEach()と一緒に同期メソッドrequest.GetResponse()を使用することができます。

public static string GetDataSync(string packageName) 
{ 
    string result = ""; 

    Uri uri = new Uri(googlePlayUrl + packageName); 

    var request = HttpWebRequest.Create(uri); 
    var response = request.GetResponse(); 

    var responseStream = response.GetResponseStream(); 
    using (StreamReader reader = new StreamReader(responseStream)) 
    { 
     result = (reader.ReadToEnd()); 
    } 
    responseStream.Close(); 

    return result; 
} 

は、メソッドを呼び出しパッケージごとにHTML文字列結果格納するParallel.ForEachとトレッドセーフなコレクションConcurrentDictionaryを使用して上記:あなたは正確に

IEnumerable<string> appPackages = new List<string>() { 
    "com.google.android.apps.youtube.music", 
    "com.netflix.mediaclient" 
}; 

ConcurrentDictionary<string, string> results = 
    new ConcurrentDictionary<string, string>(Environment.ProcessorCount, appPackages.Count()); 

Parallel.ForEach(appPackages, (app) => 
{ 
    results.TryAdd(app, GetDataSync(app)); 
}); 
関連する問題