70

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

WebClient client = new WebClient();

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

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

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

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

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

4

6 に答える 6

116

ユーザーエージェントをに追加するC#サンプルのWebClientドキュメントを確認できます。また、WindowsPhoneのサンプルについてはこちらWebClientを確認してください。

これは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";
于 2012-08-07T08:07:06.763 に答える
25

1回のリクエストの後、WebClientが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;
    }
}
于 2013-08-29T17:05:43.887 に答える
14

次のものも使用できます。

client.Headers.Add(HttpRequestHeader.UserAgent, "My app.");
于 2016-11-01T18:56:13.983 に答える
3

他の回答の補足として、ブラウザのユーザーエージェント文字列に関するMicrosoftのガイダンスを以下に示します。ユーザーエージェントの文字列は、ブラウザー(Internet ExplorerおよびEdge)およびオペレーティングシステム(Windows 7、8、10、およびWindows Phone)によって異なります。

たとえば、Windows10上のInternetExplorer11のユーザーエージェント文字列は次のとおりです。

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

およびInternetExplorerfor 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ブラウザーのユーザーエージェント文字列用に提供されています。いくつかのEdgeユーザーエージェント文字列の例については、この回答を参照してください。

最後に、MSDNの別のページに、古いデスクトップオペレーティングシステムでのIE11のガイダンスが記載されています。

Windows 8.1上のIE11

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

およびWindows7上のIE11 :

Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
于 2016-03-03T20:38:14.340 に答える
1

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

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のドキュメントを見つけることができます

于 2019-03-15T12:53:58.027 に答える
-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;
    }
}
于 2015-01-24T08:01:17.693 に答える