1

我必须使用 WebAPIHttpClient类来发送和接收HttpRequestMessageHttpResponseMessage.

我正在通过同一个HttpClient类实例跟踪多个请求(即对特定 sessionID 的多个请求)。第一个 Get 请求创建 SessionID;它HttpResponseMessage有 sessionID、cookie header 等元素。

对于第二个请求,我必须在第一个请求消息的标头中向返回的 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 对象“客户端”的现有副本。我无法使用 HttpMessageHandler 重新初始化它。这样做会创建新的 SessionID,这是不需要的。我正在使用 SessionID 在后续的 Get/Post 请求之间进行跟踪。此外,它是 C# 控制台应用程序,可以像浏览器一样模拟 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 = 内容;HttpResponseMessage GETResponse = client.SendAsync(GETRequest).Result; // 无法将内容添加到获取消息中。

4

0 回答 0