HttpClient - 如何使用其他值更新http消息头cookie

时间:2013-01-28 21:48:07

标签: c# http-get dotnet-httpclient

我必须使用WebAPI HttpClient课程来发送和接收HttpRequestMessageHttpResponseMessage

我通过HttpClient类的同一实例跟踪多个请求(即对特定会话ID的多个请求)。第一个Get请求创建SessionID;其HttpResponseMessage具有sessionID,cookie标头等元素。

对于第二个请求,我必须在第一个请求消息的标头中向返回的cookie添加其他数据。 HttpClient类只为Get - GetAsync(URL)SendAsync(HttpRequestMessage)提供了两种方法。

HttpClient类只为GET消息提供了两种方法 - GetAsync,它只接受URI,因此似乎没用。 SendAsync需要HttpRequestMessage,在此处,如果不重新HttpClientHandler类对象,则无法使用HttpClient

如何更新Cookie标头并向Get请求消息添加其他信息?

检查以下示例获取在Fiddler中捕获的消息

请求1个样本

> GET //xxxx/xx/xxx/BrowseMaterials.aspx HTTP/1.1 
> Accept: text/html,
> application/xhtml+xml, */* Referer: //xxx/xx/xx/Home.aspx
> Accept-Language: en-US User-Agent: Mozilla/5.0 (compatible; MSIE 9.0;
> Windows NT 6.1; WOW64; Trident/5.0) Accept-Encoding: gzip, deflate
> Connection: Keep-Alive Cookie: Client=MN;
> xxxx=SessionId=95ab57ca-59b0-4a13-9249-04a7f1251058&TeacherId=6584&StudentId=0&Name=DAC
> DemoTwo;
> querystring=querystring=http%3a%2f%xxxxx%2fLPN%2fTeacher%2fHome.aspx; 
> ASP.NET_SessionId=t1xadfmys5tmoz3bwnwginnw; search=; Mode=Teacher;
> TimeZoneOffset=5

请求2个样本

> Cookie: Client=MN;
> xxx=SessionId=95ab57ca-59b0-4a13-9249-04a7f1251058&TeacherId=6584&StudentId=0&Name=DAC
> DemoTwo;
> querystring=querystring=xxxx%3a%2f%2fdxxxxxxx%2fLPN%2fTeacher%2fBrowseMaterials.aspx;
> ASP.NET_SessionId=t1xadfmys5tmoz3bwnwginnw;
> search=viewall=1&grades=&materialType=6,1,2,3,4,5&itemSearchControl0=itm_att_Item
> FORMAT&itemSearchControl1=itm_att_Learning
> Modalities&itemSearchControl2=itm_att_Flesch-Kincaid Grade Level
> Readability&text=; Mode=Teacher; TimeZoneOffset=5

请不要,我使用的是HttpClient对象“client”的现有副本。我无法使用HttpMessageHandler重新初始化它。这样做会创建新的SessionID,这是不希望的。我正在使用SessionID来跟踪后续的Get / Post请求。 此外,它是C#console app。,像浏览器一样模拟Web请求。如果您有任何其他问题,请与我们联系。 感谢所有人的相关意见。

C# code 

方法#1     HttpRequestMessage GETRequest = new HttpRequestMessage(HttpMethod.Get,completeUrl);     string additionalCookVal =“viewall = 1& grades =& materialType =& itemSearchControl0 = itm_att_Item FORMAT,SIM& itemSearchControl1 = itm_att_Learning modalities& itemSearchControl2 = itm_att_Flesch-Kincaid Grade Level Readability& text =”;     GETRequest.Headers.Add(“Cookie1”,additionalCookVal); //这是默默无视的     HttpResponseMessage GETResponse = client.SendAsync(GETRequest).Result;

方法#2     var content = new FormUrlEncodedContent(additionalCookVals); // additionalCookVals是一个Dictionary对象     HttpRequestMessage GETRequest = new HttpRequestMessage(HttpMethod.Get,completeUrl);     GETRequest.Content = content;     HttpResponseMessage GETResponse = client.SendAsync(GETRequest).Result; //它无法说内容无法添加到Get消息中。

0 个答案:

没有答案