2012-08-07 29 views
43

Windows Phone 7のWebClient要求に対してUser-Agentヘッダーを設定する適切な方法は何ですか。 2つのオプションが見つかりましたが、どちらが正しいかはわかりません。 WebClientのオブジェクトを考慮:WebClient要求のUser-Agentヘッダーの設定

  1. を使用してユーザエージェントを設定します:

    client.Headers["User-Agent"] = "myUserAgentString"; 
    
  2. WebHeaderCollectionを使用してのUser-Agentを設定します。

    WebClient client = new WebClient(); 
    

    私は2つのオプションが見ました

    WebHeaderCollection headers = new WebHeaderCollection(); 
    headers[HttpRequestHeader.UserAgent] = "userAgentString"; 
    client.Headers = headers; 
    

上記の2つの方法のどちらが適切か教えてください。

答えて

78

here(msdn)は、WebClientのC#用のユーザーエージェントを追加するためのサンプルを「適切」に表示し、Windows Phone用のshowサンプルにはHere(msdn)を追加できます。

これは、C#のために、このサンプルである:

WebClient client = new WebClient(); 

// Add a user agent header in case the 
// requested URI contains a query. 

client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 

これはWindowsの携帯電話(シルバー)のサンプルです:私は、Webクライアントが保たことがわかっ

request.Headers["UserAgent"]= "appname"; 

または

request.UserAgent = "appname"; 
18

私のUser-Agentヘッダーを1回の要求の後に削除すると、毎回それを設定するのに疲れました。自分のカスタムWebClientを作成し、GetWebRequestメソッドをオーバーライドしてを作成することによって、永久にUser-Agentを設定するためのハックを使用しました。お役に立てれば。他の回答への補足として

public class CustomWebClient : WebClient 
{ 
    public CustomWebClient(){} 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = base.GetWebRequest(address) as HttpWebRequest; 
     request.UserAgent="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0;)"; 

     //... your other custom code... 

     return request; 
    } 
} 
-2
const string ua = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; 
Request.Headers["User-Agent"] = ua; 
var httpWorkerRequestField = Request.GetType().GetField("_wr", BindingFlags.Instance | BindingFlags.NonPublic); 
if (httpWorkerRequestField != null) 
{ 
    var httpWorkerRequest = httpWorkerRequestField.GetValue(Request); 
    var knownRequestHeadersField = httpWorkerRequest.GetType().GetField("_knownRequestHeaders", BindingFlags.Instance | BindingFlags.NonPublic); 
    if (knownRequestHeadersField != null) 
    { 
     string[] knownRequestHeaders = (string[])knownRequestHeadersField.GetValue(httpWorkerRequest); 
        knownRequestHeaders[39] = ua; 
    } 
} 
+4

コードだけではありませんが答え、それが何をしているのか、それがなぜ必要なのかを説明できますか?利用される? –

1

、ここではそのブラウザ用user agent stringsのためのMicrosoftのガイダンスがあります。ユーザーエージェント文字列は、ブラウザ(Internet ExplorerとEdge)とオペレーティングシステム(Windows 7,8,10とWindows Phone)によって異なります。例えば

、ここではWindowsの10上のInternet Explorer 11のためのユーザーエージェント文字列です:

Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko 

とWindows Phoneの8.1アップデートためのInternet Explorer用:

Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537 

テンプレートDesktop、Mobile、およびWebView用のEdgeブラウザ用のユーザエージェント文字列に与えられます。一部のEdgeユーザーエージェント文字列の例については、this answerを参照してください。

最後に、another page on MSDNは、古いデスクトップオペレーティングシステムでIE11のガイダンスを提供します。Windowsの8.1

IE11:

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

のWindows 7上のIE11:

Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko 
1

あなたはまた、その使用することができます。

client.Headers.Add(HttpRequestHeader.UserAgent, "My app."); 
関連する問題