idhttp提交post带参数并带上cookie

Posted 西瓜大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了idhttp提交post带参数并带上cookie相关的知识,希望对你有一定的参考价值。

有这么一个提交连接

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给服务器即可

 

以上是关于idhttp提交post带参数并带上cookie的主要内容,如果未能解决你的问题,请参考以下文章

PHP 如何带上cookies模拟GET表单提交

delphi idhttp怎么填请求参数

用php做个post提交

jQuery跨域请求带Cookie和Session的方法

views 视图层

djangoCBV文件上传