有这么一个提交连接
http://www.XXXXXX.com/test.php?p1=411328&p2=1&d1=HeroSkinList
一共有三个参数[p1] [p2] [d1]
postcmd := TStringList.Create; // 组合参数列表
postcmd.Add('p1=4011058724');
postcmd.Add('p2=30');
postcmd.Add('d1=HeroSkinList');
以上即可将参数组合,然后利用idhttp进行post提交
Memo1.Text := idhtp1.Post(url1, postcmd); // 以post的方式发送到服务器
memo1.text当中直接就返回post提交后返回的数据,但是这个时候只是将参数带到了连接当中进行提交,并没有带上cookie
加入网站需要登录信息的情况下,直接提交就有可能提交失败,因此要把cookie带上
如何获取cookie,web框架用的是DCEF框架,直接利用执行js代码的方式可以获得cookie,方法如下:
procedure TForm1.btn4Click(Sender: TObject);
var
js: string;
begin
js := 'var uPage=document.cookie; alert(uPage);'; //在次js代码当中,将document.cookie指令(猜测这个指令应该是dcef自带的,任何网站都适用)返回的数据赋值给uPage,然后利用alert弹框将内容弹出给crmJsdialog事件,在事件中获得相关js返回的结果
crm.Browser.MainFrame.ExecuteJavaScript(js, 'about:blank', 0);
end;
执行次js后如何取得js返回的结果呢,方法如下:
在dcef控件当中,有事件
procedure TForm1.crmJsdialog(Sender: TObject; const browser: ICefBrowser; const originUrl, acceptLang: ustring; dialogType: TCefJsDialogType; const messageText, defaultPromptText: ustring; callback: ICefJsDialogCallback; out suppressMessage, Result: Boolean);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add(messageText); //messageText即为js代码当中利用alert弹出对话框内容
Result := False; //这里返回true表示不再弹出提示对话框
end;
由此获得cookie的结果,然后将结果附带进入idhttp当中:
idhtp1.Request.CustomHeaders.Add('Cookie:' + memo1.Text);
最后利用 Memo1.Text := idhtp1.Post(url1, postcmd); // 以post的方式发送到服务器
方法post给服务器即可