【发布时间】:2018-10-05 16:11:26
【问题描述】:
浏览了一些阅读材料,发现只需要输入简单表单而不是浏览器自动化的流程,我听说使用 HTTPrequests 期望的信息向服务器发出请求和发布。我想我会试一试!
我会尝试直截了当:
class Program
{
private static System.Net.CookieContainer cookieContainer = new CookieContainer();
private static HttpClientHandler clientHandler = new HttpClientHandler
{
AllowAutoRedirect = true,
UseCookies = true,
CookieContainer = cookieContainer
};
这就是我试图让 Http 客户端在整个程序中使用。当我进入第一个登录屏幕时(我使用 fiddler 查看需要发布的表单),我使用该帖子成功登录。
我给你看post方法:
async static void PostRequest(string strUrl,
IEnumerable<KeyValuePair<string, string>> queries)
{
HttpContent q = new FormUrlEncodedContent(queries);
HttpResponseMessage response = await client.PostAsync(strUrl, q);
HttpContent content = response.Content;
string myContent = await content.ReadAsStringAsync();
// Console.WriteLine(myContent);
Console.WriteLine(response);
Console.WriteLine(myContent);
response.Dispose();
}
我的问题在这里,我尝试做的下一篇文章是您登录后的另一个表单。我再次使用 Fiddler 来确定服务器的预期内容,并将其发布到适当的 URL,但是当我打印每个过程的步骤,它几乎就像它不知道会话或其他东西。 Fiddler 向我展示了 cookie 和会话,我认为它是通过容器捕获的,然后当我请求/发布到服务器上的页面时,它可以在整个程序的其余部分中使用。
我错过了什么吗?你们都无法访问实际的网页,但我可以解释提琴手在 cookie 选项卡下显示的内容:说请求发送了 2685 字节的 cookie 数据,然后是大量随机字母和数字以及一些值看起来特定于我的登录,然后我还会看到另一组称为会话 id 的随机数字和字母。
所以总结一下我的问题,我是否误解了 CookieContainer 的作用?我的假设是在我使用此 HttpClient 发出的所有请求或帖子中,它会知道这是我初始登录时的会话。
我可能还没有发现的想法、想法、链接,都值得赞赏:)。
谢谢大家!
【问题讨论】:
-
CookieContainer 绑定到一个请求/响应。您需要从登录响应中检索身份验证 cookie 并将它们重新添加到其他请求中。恕我直言,这里最好的方法是创建一个
ServiceCliente来跟踪并在每次请求时自动添加此 cookie,而不是每次都手动执行此操作。 -
明白了,当你这么说的时候,你的意思是我能够打印到控制台的值,以“set-cookie”开头,所以后面的值(长字符串) 是我想要的吗?
-
安德森,你应该回答这个问题,这样我才能挑选它。正如你所说的那样,我能够以这种方式获取 cookie 和会话 ID。
-
已回答,因此您可以标记为已解决。之后我将删除此评论:)
-
谢谢你!真的帮了我大忙!
标签: c# cookies httpclient