Настройка заголовка User-Agent для запроса WebClient
Каков правильный способ установки заголовка User-Agent для запроса WebClient для Windows Phone 7?
Я нашел 2 варианта, но не уверен, какой из них правильный. Рассмотрение объекта WebClient:
WebClient client = new WebClient();
Я увидел 2 варианта:
-
установите User-Agent, используя:
client.Headers["User-Agent"] = "myUserAgentString";
-
установите User-Agent с помощью WebHeaderCollection:
WebHeaderCollection headers = new WebHeaderCollection();
headers[HttpRequestHeader.UserAgent] = "userAgentString";
client.Headers = headers;
Можете ли вы сообщить, какой из двух вышеперечисленных методов является правильным?
Ответы
Ответ 1
вы можете пойти здесь (msdn), чтобы показать образец "правильный" для добавления пользовательского агента в ваш WebClient для С# и Здесь (msdn) для показа образца для телефона Windows.
вот этот пример для С#:
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";
или
request.UserAgent = "appname";
Ответ 2
Я обнаружил, что WebClient продолжал удалять заголовок User-Agent после одного запроса, и я устал настраивать его каждый раз. Я использовал хак для установки User-Agent навсегда, создав собственный пользовательский WebClient и переопределяя метод GetWebRequest. Надеюсь это поможет.
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;
}
}
Ответ 3
В качестве дополнения к другим ответам, вот руководство Microsoft для строки пользовательского агента для своих браузеров. Строки пользовательского агента отличаются браузером (Internet Explorer и Edge) и операционной системой (Windows 7, 8, 10 и Windows Phone).
Например, вот строка пользовательского агента для Internet Explorer 11 в Windows 10:
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
и для Internet Explorer для 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
Шаблоны задаются для строк пользовательского агента для браузера Edge для настольных компьютеров, мобильных устройств и WebView. См. этот ответ для некоторых примеров строк интерфейса пользователя Edge.
Наконец, другая страница в MSDN содержит рекомендации для IE11 в старых настольных операционных системах.
IE11 в Windows 8.1:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
и IE11 в Windows 7:
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Ответ 4
Вы также можете использовать это:
client.Headers.Add(HttpRequestHeader.UserAgent, "My app.");
Ответ 5
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;
}
}