2013-04-03 65 views
2

我需要登录到网站,我可以通过诸如url.com/ssorequest?parameters=123之类的网址执行此操作。如果这是在登录的地址中输入并被重定向到门户。以编程方式篡改http请求

现在即时通讯应该通过HTTP POST请求要做到这一点编程,但我不能让它开始工作,我重定向到一个登录表单,而不是门户网站,也就是我不得到签署。

我用提琴手找出两种方法之间的区别是什么。我发现一些幕后的获取请求是不同的。浏览器获取请求将cookie数据发送到服务器,而小提琴家发出请求后不会。

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

问:为什么它的行为与浏览器的http post和请求从Fiddler完成时有所不同?

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

回答

1

很可能你遇到了一个anti-forgery cookie。它的工作方式可确保您使用首先在浏览器中请求并加载的页面进行登录,并且cookie仅对一个请求有效,因此如果您运行相同的请求,提琴手将无法登录再次。

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

编辑:

第1步:浏览网站上的任何页面。这将启动会议。它也会给你会话cookie。

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

第二步:在后登录页(或任何网页表单动作导致)的登录信息与第1步。如果这是一个令牌获得的Cookie /令牌一起,包括在您的文章数据一起登录信息或如果一个cookie,添加它请求。

+0

但是,如果我在fiddler中制作一个全新的get-request(就像从浏览器中完成的那样),它应该完全像浏览器一样处理? (在第二次获得请求中的第一个请求没有跟踪在提琴手中)。它只是一个新的请求,但它不会因为某些原因表现出相同的... – mdc

+0

只有一个区别。当你通过浏览器创建请求时,它保持会话,而小提琴手则不会。它不知道以前的请求。为了成功使用fiddler或从您的C#代码登录,重要的是您还要发送前一个请求中的Cookie,但是您通过它获取了登录页面。 –

+0

所以我去登录网站(我得到一个会话ID cookie)。请求下一个网址并发送Cookie。请求第三个网址并发送第二个请求中的回复?问题在于第二个url,它希望URL中的会话ID以及包含相同ID的cookie。当我在提琴手中给出这个信息时,我得到一个回应,说它是一个非法的SSL参数... – mdc

相关问题