2017-12-07 2 views
2

나는 제어 할 수없는 제 3 자 서비스에 HttpClient API를 사용하여 웹 서비스 요청을하는 응용 프로그램을 만들고 있습니다. 서비스가 ETag HTTP 헤더 (값이 따옴표로 묶이지 않음)에 따라 잘못된 값을 포함하는 요청에 응답하는 것 같습니다. 이로 인해으로 HttpClient이 실패합니다.HttpClient가 응답으로 유효하지 않은 ETag 헤더를 무시하도록 할 수 있습니까?

이 경우 나는 ETag 헤더에 관심이 없으며 잘못된 값을 무시할 수 있기를 원합니다. HttpClient을 사용하여이 작업을 수행 할 수 있습니까?

나는이 특정 유스 케이스는 HttpClient를 사용할 때 훨씬 간단 SOCKS 프록시를 사용하는 저를 필요로하기 때문에 WebClient 또는 WebRequest 통해 HttpClient API를 사용하는 것을 선호

.

+2

만약에 위임 핸들러를 만들고 그 안에 해당 헤더를 제거? – Evk

답변

2

이 시도 :

class Example 
{ 
    static void Main() 
    { 
     var client = HttpClientFactory.Create(new Handler()); 
     client.BaseAddress = new Uri("http://www.example.local"); 
     var r = client.GetAsync("").Result; 
     Console.WriteLine(r.StatusCode); 
     Console.WriteLine(r.Headers.ETag); 
    } 
} 

class Handler : DelegatingHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     var headerName = "ETag"; 
     var r = await base.SendAsync(request, cancellationToken); 
     var header = r.Headers.FirstOrDefault(x => x.Key == headerName); 
     var updatedValue = header.Value.Select(x => x.StartsWith("\"") ? x : "\"" + x + "\"").ToList(); 
     r.Headers.Remove(headerName); 
     r.Headers.Add(headerName, updatedValue); 
     return r; 
    } 
} 

내 응답 헤더 :

HTTP/1.1 200 OK

날짜 : 2013년 1월 25일 (금) 그리니치 표준시 16시 49분 29초

FiddlerTemplate : True

콘텐츠 길이 : 310

콘텐츠 형식 : 이미지/GIF

의 ETag : rtt123

+0

불행히도 이것은 작동하지 않습니다. 델리게이트 핸들러가 실행 되더라도,'base.SendAsync()'에 대한 호출은 이전과 같은'FormatException'으로 실패합니다. –

관련 문제