program tip

WebClient 요청에 대한 User-Agent 헤더 설정

radiobox 2020. 11. 27. 07:59
반응형

WebClient 요청에 대한 User-Agent 헤더 설정


Windows Phone 7에 대한 WebClient 요청에 대한 User-Agent 헤더를 설정하는 적절한 방법은 무엇입니까? 두 가지 옵션을 찾았지만 어느 것이 올바른지 확실하지 않습니다. WebClient 개체 고려 :

WebClient client = new WebClient();

두 가지 옵션을 보았습니다.

  1. 다음을 사용하여 User-Agent를 설정합니다.

    client.Headers["User-Agent"] = "myUserAgentString";
    
  2. WebHeaderCollection을 사용하여 User-Agent를 설정합니다.

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

위의 두 가지 방법 중 적절한 방법을 알려주시겠습니까?


User-Agent를 추가하는 C # 샘플에 대한 WebClient설명서확인 WebClient하고 여기 에서 Windows Phone 용 샘플을 확인할 수 있습니다.

다음은 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가 한 번의 요청 후에 내 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 

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

Templates are given for the user agent strings for the Edge browser for Desktop, Mobile and WebView. See this answer for some Edge user agent string examples.

Finally, another page on MSDN provides guidance for IE11 on older desktop operating systems.

IE11 on Windows 8.1:

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

and IE11 on Windows 7:

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

This worked for me:

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);

Here you can find the documentation for TryAddWithoutValidation


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;
    }
}

참고URL : https://stackoverflow.com/questions/11841540/setting-the-user-agent-header-for-a-webclient-request

반응형