1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15+ using System . Net ;
1516using RestSharp . Extensions ;
1617
1718namespace RestSharp ;
@@ -32,7 +33,7 @@ public async Task<RestResponse> ExecuteAsync(RestRequest request, CancellationTo
3233 internalResponse . ResponseMessage ! ,
3334 request ,
3435 Options . Encoding ,
35- CookieContainer . GetCookies ( internalResponse . Url ) ,
36+ request . CookieContainer ! . GetCookies ( internalResponse . Url ) ,
3637 CalculateResponseStatus ,
3738 cancellationToken
3839 )
@@ -50,8 +51,7 @@ async Task<InternalResponse> ExecuteInternal(RestRequest request, CancellationTo
5051
5152 using var requestContent = new RequestContent ( this , request ) ;
5253
53- if ( Authenticator != null )
54- await Authenticator . Authenticate ( this , request ) . ConfigureAwait ( false ) ;
54+ if ( Authenticator != null ) await Authenticator . Authenticate ( this , request ) . ConfigureAwait ( false ) ;
5555
5656 var httpMethod = AsHttpMethod ( request . Method ) ;
5757 var url = BuildUri ( request ) ;
@@ -61,22 +61,31 @@ async Task<InternalResponse> ExecuteInternal(RestRequest request, CancellationTo
6161
6262 using var timeoutCts = new CancellationTokenSource ( request . Timeout > 0 ? request . Timeout : int . MaxValue ) ;
6363 using var cts = CancellationTokenSource . CreateLinkedTokenSource ( timeoutCts . Token , cancellationToken ) ;
64- var ct = cts . Token ;
64+
65+ var ct = cts . Token ;
6566
6667 try {
68+ // Make sure we have a cookie container if not provided in the request
69+ var cookieContainer = request . CookieContainer ??= new CookieContainer ( ) ;
6770 var headers = new RequestHeaders ( )
6871 . AddHeaders ( request . Parameters )
6972 . AddHeaders ( DefaultParameters )
70- . AddAcceptHeader ( AcceptedContentTypes ) ;
73+ . AddAcceptHeader ( AcceptedContentTypes )
74+ . AddCookieHeaders ( cookieContainer , url ) ;
7175 message . AddHeaders ( headers ) ;
7276
73- if ( request . OnBeforeRequest != null )
74- await request . OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
77+ if ( request . OnBeforeRequest != null ) await request . OnBeforeRequest ( message ) . ConfigureAwait ( false ) ;
7578
7679 var responseMessage = await HttpClient . SendAsync ( message , request . CompletionOption , ct ) . ConfigureAwait ( false ) ;
7780
78- if ( request . OnAfterRequest != null )
79- await request . OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
81+ // Parse all the cookies from the response and update the cookie jar with cookies
82+ if ( responseMessage . Headers . TryGetValues ( "Set-Cookie" , out var cookiesHeader ) ) {
83+ foreach ( var header in cookiesHeader ) {
84+ cookieContainer . SetCookies ( url , header ) ;
85+ }
86+ }
87+
88+ if ( request . OnAfterRequest != null ) await request . OnAfterRequest ( responseMessage ) . ConfigureAwait ( false ) ;
8089
8190 return new InternalResponse ( responseMessage , url , null , timeoutCts . Token ) ;
8291 }
@@ -99,8 +108,10 @@ record InternalResponse(HttpResponseMessage? ResponseMessage, Uri Url, Exception
99108 request . CompletionOption = HttpCompletionOption . ResponseHeadersRead ;
100109 var response = await ExecuteInternal ( request , cancellationToken ) . ConfigureAwait ( false ) ;
101110
102- if ( response . Exception != null ) {
103- return Options . ThrowOnAnyError ? throw response . Exception : null ;
111+ var exception = response . Exception ?? response . ResponseMessage ? . MaybeException ( ) ;
112+
113+ if ( exception != null ) {
114+ return Options . ThrowOnAnyError ? throw exception : null ;
104115 }
105116
106117 if ( response . ResponseMessage == null ) return null ;
@@ -141,7 +152,7 @@ static HttpMethod AsHttpMethod(Method method)
141152#if NETSTANDARD || NETFRAMEWORK
142153 Method . Patch => new HttpMethod ( "PATCH" ) ,
143154#else
144- Method . Patch => HttpMethod. Patch ,
155+ Method . Patch => HttpMethod. Patch ,
145156#endif
146157 Method. Merge => new HttpMethod ( "MERGE" ) ,
147158 Method . Copy => new HttpMethod ( "COPY" ) ,
@@ -157,11 +168,11 @@ public static RestResponse ThrowIfError(this RestResponse response) {
157168
158169 return response ;
159170 }
160-
171+
161172 public static RestResponse < T > ThrowIfError < T > ( this RestResponse < T > response ) {
162173 var exception = response . GetException ( ) ;
163174 if ( exception != null ) throw exception ;
164175
165176 return response ;
166177 }
167- }
178+ }
0 commit comments