Windows Phone 7のWebClient要求のUser-Agentヘッダーを設定する適切な方法は何ですか? 2つのオプションを見つけましたが、どちらが正しいのかはわかりません。 WebClientオブジェクトの検討:
WebClient client = new WebClient();
私は2つのオプションを見ました:
以下を使用してUser-Agentを設定します。
client.Headers["User-Agent"] = "myUserAgentString";
webHeaderCollectionを使用してUser-Agentを設定します。
WebHeaderCollection headers = new WebHeaderCollection();
headers[HttpRequestHeader.UserAgent] = "userAgentString";
client.Headers = headers;
上記の2つの方法のどちらが適切な方法か教えてください。
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";
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;
}
}
それも使用できます:
client.Headers.Add(HttpRequestHeader.UserAgent, "My app.");
他の回答の補足として、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
これは私のために働いた:
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 のドキュメントを見つけることができます