22using System . Net ;
33using System . Net . Http ;
44using System . Runtime . CompilerServices ;
5- using System . Threading ;
6- using System . Threading . Tasks ;
75
86namespace DotnetSpider . Core . Infrastructure
97{
@@ -29,7 +27,7 @@ internal void Init(bool allowAutoRedirect, Action configAction, Func<CookieConta
2927 AutomaticDecompression = DecompressionMethods . Deflate | DecompressionMethods . GZip ,
3028 UseProxy = true ,
3129 UseCookies = true ,
32- AllowAutoRedirect = allowAutoRedirect ,
30+ AllowAutoRedirect = false ,
3331 MaxAutomaticRedirections = 10
3432 } ;
3533 Client = allowAutoRedirect ? new HttpClient ( new GlobalRedirectHandler ( Handler ) ) : new HttpClient ( Handler ) ;
@@ -41,60 +39,6 @@ internal void Init(bool allowAutoRedirect, Action configAction, Func<CookieConta
4139
4240 _inited = true ;
4341 }
44-
45- public class GlobalRedirectHandler : DelegatingHandler
46- {
47- public GlobalRedirectHandler ( HttpMessageHandler innerHandler )
48- {
49- InnerHandler = innerHandler ;
50- }
51-
52- protected override async Task < HttpResponseMessage > SendAsync ( HttpRequestMessage request , CancellationToken cancellationToken )
53- {
54- var response = await base . SendAsync ( request , cancellationToken ) ;
55-
56- if ( response . StatusCode == HttpStatusCode . MovedPermanently
57- || response . StatusCode == HttpStatusCode . Moved
58- || response . StatusCode == HttpStatusCode . Redirect
59- || response . StatusCode == HttpStatusCode . Found
60- || response . StatusCode == HttpStatusCode . SeeOther
61- || response . StatusCode == HttpStatusCode . RedirectKeepVerb
62- || response . StatusCode == HttpStatusCode . TemporaryRedirect
63- || ( int ) response . StatusCode == 308 )
64- {
65-
66- var newRequest = CopyRequest ( response . RequestMessage ) ;
67-
68- if ( response . StatusCode == HttpStatusCode . Redirect
69- || response . StatusCode == HttpStatusCode . Found
70- || response . StatusCode == HttpStatusCode . SeeOther )
71- {
72- newRequest . Content = null ;
73- newRequest . Method = HttpMethod . Get ;
74- }
75- newRequest . RequestUri = new Uri ( response . RequestMessage . RequestUri , response . Headers . Location ) ;
76-
77- response = await SendAsync ( newRequest , cancellationToken ) ;
78- }
79- return response ;
80- }
81-
82- private static HttpRequestMessage CopyRequest ( HttpRequestMessage oldRequest )
83- {
84- var newrequest = new HttpRequestMessage ( oldRequest . Method , oldRequest . RequestUri ) ;
85-
86- foreach ( var header in oldRequest . Headers )
87- {
88- newrequest . Headers . TryAddWithoutValidation ( header . Key , header . Value ) ;
89- }
90- foreach ( var property in oldRequest . Properties )
91- {
92- newrequest . Properties . Add ( property ) ;
93- }
94- if ( oldRequest . Content != null ) newrequest . Content = new StreamContent ( oldRequest . Content . ReadAsStreamAsync ( ) . Result ) ;
95- return newrequest ;
96- }
97- }
9842 }
9943 /// <summary>
10044 /// Httpclient pool impletion for <see cref="IHttpClientPool"/>
0 commit comments