Idhttp伪造来源地址、Cookie欺骗、通过代理访问

1、伪造来源地址:使用IdHttp可以伪造这个来源地址,而且很简单,只要在访问某地之前加上一句:

IdHttp1.Request.Referer := 'pics/www.3464.com/';

那么来源地址就变成了pics/www.3464.com/而不是你实际的来源地址了。

2、Cookie欺骗:
如何用idhttp提交自己构造过的Cookie

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

比如站点pics/www.aaa.com 是要cookie的。我已经在程序上放了idhttp和IdCookieManager。
我getpics/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

在Idhttp中,要想修改Cookie的代码,就要用到Request的RawHeaders中的Values值。
这个值怎么用呢?
Values接受一个string的值,该值指定了所访问的变量。
如HTTP头是这样定义的(其中一些):

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

而Values的值就可以是Cookie,User-Agent,Accept-Encoding……等等。

RawHeaders必须初始化后才可用。

正确的代码应该是这样:

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;

http.Request.SetHeaders;//必须加上,才能完成下面的工作
//http.Request.RawHeaders.Values['Cookie']:=_SESSION;//自定义Cookie
//http.Request.CustomHeaders.Values['Cookie']:=Cookie; //也得加上,不然Cookie没有意义,研究了很多
http.Http.Request.CustomHeaders.Text:='Cookie: '+Cookie;//最强悍的一个,上面两种方式有时候就是不行
http.HandleRedirects:= true;
http.Request.UserAgent := 'OS/1.0';//自定义客户端的签名,可以自定义
http.request.ContentType:='application/x-www-form-urlencoded';//使用POST方式提交时候,必须加上
http.Request.Referer :='pics/www.4936.cn/index.php';
http.Request.Host:=www.test.cn;

3、代理服务器:

使用idhttp控件,调整代理服务器参数也可以实现通过代理服务器访问。

idhttp1.ProxyParams.ProxyServer :=proxyip.Text ;//代理地址idhttp1.ProxyParams.ProxyPort :=StrToInt(port.text);//端口//如果代理需要验证idhttp1.ProxyParams.ProxyUsername:=uname.Text ;//用户名idhttp1.ProxyParams.ProxyPassword:=pw.Text ;//密码

如果是在局域网内,代理不成功。