如何用idhttp提交自己构造过的Cookie

如何用idhttp提交自己构造过的Cookie

我不知道的是:如果把自己构造过的Cookie传给idhttp让它提交。

比如站点 http://www.aaa.com 是要cookie的。
我已经在程序上放了idhttp和IdCookieManager。
我get http://www.aaa.com 后,idhttp通过IdCookieManager已经得到当前站点的Cookie了。
我可以用
for i := 0 to IdCookieManager1.CookieCollection.Count - 1 do
      memo1.Lines.Add(IdCookieManager1.CookieCollection.Items[i].CookieText);
得到。

现在,如果我想更改这个cookie,或者说我想按这个Cookie的格式重新写一个,再用idhttp进行post。我应该怎么做?
用途是Cookie欺骗等。
如:
得到的Cookie为:skin=2; ASPSESSIONIDSQTSABQD=IEMKPIDBKKMEEKEHLLOIJJON; UserCode=3CA001D63984E6115FE55681%2E95
我更改为:skin=123; ASPSESSIONIDSQTSABQD=IEMKPIDBKKMEEKEHLLOIJJON; UserCode=3CA001D63984E6115FE55681%2E95
我再post

-----------------------------------

今天忙了一个下午,终于研究出答案了。

以前不管是做什么软件,只要是关于网页post提交cookie的,我都是用TcpClient,为什么呢?
因为我一直找不到idhttp提交Cookie的方法,今天终于有了结果。

在Idhttp中,要想修改Cookie的代码,就要用到Request的RawHeaders中的Values值。
这个值怎么用呢?
Values接受一个string的值,该值指定了所访问的变量。
如HTTP头是这样定义的(其中一些):
[color=royalblue]Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;
Cookie: JSESSIONID=aoOYvjM-IKzh[/color]
而Values的值就可以是Cookie,User-Agent,Accept-Encoding……等等。

所以,代码应该是这样:
[color=royalblue]  try
    idhttp1.Request.RawHeaders.Values['Cookie'] := '这里是cookie的值';  //
    memo1.Lines.Add(idhttp1.Request.RawHeaders.Values['Cookie']);
    idhttp1.Post('/webmail/login.jsp',data1,data2);
    memo1.Lines.Add(idhttp1.Request.RawHeaders.Values['Cookie']);
    idhttp1.Request.RawHeaders.Values['Cookie'] := 'asdfasdf';
    memo1.Lines.Add(idhttp1.Request.RawHeaders.Text);
  except
    idhttp1.Get(idhttp1.Response.Location, data1);
  end;[/color]
初一看,这代码是没有什么问题的。但,memo1的第一次ADD并没有任何值,奇怪。
而第三次ADD就被改为了'asdfasdf',正是我们所希望的。
我正是卡在了这里。为什么第一次idhttp1.Request.RawHeaders.Values['Cookie'] := '这里是cookie的值'; 没有结果呢?

搞了很久。我才发现,在第一次传值的时候,RawHeaders跟本没有被初始化。而第三次经过Post以后,RawHeaders被初始化了,所以得到了我们所要的结果。

正确的代码应该是这样:
[color=royalblue]try
    idhttp1.Request.SetHeaders;  //最重要的初始化。
    idhttp1.Request.RawHeaders.Values['Cookie'] := '这里是cookie的值';
    idhttp1.Post('/webmail/login.jsp',data1,data2);
except
    idhttp1.Get(idhttp1.Response.Location, data1);
end;[/color]
posted @ 2006-06-06 22:37  小洋房  阅读(3607)  评论(0编辑  收藏  举报