2

我需要登录一个站点,我可以通过 url.com/ssorequest?parameters=123 之类的 url 来执行此操作。如果这是在我登录的地址中输入的并被重定向到门户。

现在我应该通过 http post 请求以编程方式执行此操作,但我无法让它工作,我被重定向到登录表单而不是门户,即我没有登录。

我使用 Fiddler 来找出这两种方法之间的区别。我发现一些幕后的 get-request 是不同的。浏览器的 get-requests 将 cookie 数据发送到服务器,而 fiddler 的 post-request 则不会。

当我使用 fiddler 重复浏览器首先调用它时,它也不会发送 cookie 数据。所以它只有在我通过浏览器窗口执行时才有效。除非我在提琴手中使用断点并篡改包含 cookie 数据的请求。

问:为什么它与浏览器在使用 http post 和从 Fiddler 完成请求时表现不同?

问:有没有办法在我的 C# 应用程序中以编程方式篡改发出的请求,而无需编写我自己的 Fiddler 应用程序?

4

1 回答 1

1

您很可能遇到过防伪cookie。它的工作原理是确保您使用第一次请求并在浏览器中加载的页面登录,并且 cookie 仅对一个请求有效,因此如果您运行相同的请求,提琴手将无法登录再次。

使用 C#,您首先必须请求登录页面并在 cookie 容器中获取该页面提供的 cookie。下次,当您将页面连同数据一起发布时,您必须确保 cookie 与请求一起附加。

编辑:

Step1:浏览网站上的任何页面。这将启动会话。它还将为您提供会话 cookie。

Step2:请求登录页面。将第一步中获得的 cookie 与登录页面一起发送,以便它可以识别会话。这一步很关键。在这个阶段,根据站点正在使用的安全系统,可能有两种情况之一。它要么将安全 cookie 与会话 cookie 一起发送,要么将在表单中添加一个隐藏变量以及一个用作安全令牌的值。确保您获得此令牌/cookie。

第 2 步:在登录页面(或表单操作指向的任何页面)上发布登录信息以及在第 1 步中获得的 cookie/令牌。如果是令牌,请将其与登录信息一起包含在您的发布数据中,或者如果cookie,将其添加到请求中。

于 2013-04-03T14:17:27.173 回答