我需要登录网站,我可以通过网址(例如url.com/ssorequest?parameters=123)进行操作。如果在登录的地址中键入此内容并将其重定向到门户网站。
现在我应该以编程方式通过http post请求执行此操作,但我无法使其工作,我被重定向到表单而不是门户网站,即我没有登录。
我用Fiddler找出两种方法之间的区别。我发现一些幕后的请求是不同的。浏览器get-requests将cookie数据发送到服务器,而后请求的小提琴程序则不会。
当我使用fiddler重复浏览器时,首先调用它也不会发送cookie数据。所以它只有在我通过浏览器窗口进行时才有效。除非我在fiddler中使用断点并篡改包含cookie数据的请求。
问:为什么它与具有http帖子和来自Fiddler的请求的浏览器的行为有所不同?
问:有没有办法在不编写我自己的Fiddler应用程序的情况下篡改我在C#应用程序中以编程方式发出的请求?答案 0 :(得分:1)
很可能您遇到了anti-forgery Cookie。它的工作方式是确保您使用首次请求并在浏览器中加载的页面登录,并且cookie仅对一个请求有效,因此如果您运行相同的请求,fiddler将无法登录试。
使用C#,您首先必须请求登录页面,并在cookie容器中获取此页面提供的cookie。下次,当您将页面与数据一起发布时,您必须确保cookie附加了请求。
编辑:
步骤1:浏览网站上的任何页面。这将启动会话。它还会为您提供会话cookie。
步骤2:请求登录页面。将步骤1中获取的cookie与登录页面一起发送,以便它可以识别会话。这一步至关重要。在此阶段,根据安全系统站点的使用情况,可能存在两种情况。它将发送一个安全cookie以及会话cookie,或者它将在表单中添加一个隐藏变量以及一个用作安全令牌的值。确保您获得此令牌/ cookie。
步骤2:在登录页面(或表单操作导致的任何页面)上发布登录信息以及在步骤1中获取的cookie /令牌。如果是令牌,请将其包含在您的帖子数据中以及登录信息或cookie,请将其添加到请求中。