web-dev-qa-db-ja.com

WebClient要求のUser-Agentヘッダーの設定

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

WebClient client = new WebClient();

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

  1. 以下を使用してUser-Agentを設定します。

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

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

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

62
AndreiC

User AgentをWebClientに追加するC#サンプルの場合は WebClient documentation を、Windows Phoneのサンプルの場合は here を確認できます。

これは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 Phone(Silverlight)のサンプルです。

request.Headers["UserAgent"] = "appname";
// OR
request.UserAgent = "appname";
101
Doc Roms

WebClientは1回のリクエストの後にUser-Agentヘッダーを削除し続け、毎回設定するのにうんざりしていることがわかりました。ハックを使用して、独自のカスタム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;
    }
}
23
Ambrose Leung

それも使用できます:

client.Headers.Add(HttpRequestHeader.UserAgent, "My app.");
8

他の回答の補足として、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 

Internet Explorer for Windows Phone 8.1 Update

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

デスクトップ、モバイル、およびWebViewのEdgeブラウザのユーザーエージェント文字列用のテンプレートが提供されます。エッジユーザーエージェントの文字列の例については、 この回答 を参照してください。

最後に、 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
2
DavidRR

これは私のために働いた:

var message = new HttpRequestMessage(method, url);
message.Headers.TryAddWithoutValidation("user-agent", "<user agent header value>");
var client = new HttpClient();
var response = await client.SendAsync(message);

ここで TryAddWithoutValidation のドキュメントを見つけることができます

1
Oscar Fraxedas