zoukankan      html  css  js  c++  java
  • 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给服务器即可

     

  • 相关阅读:
    web.xml配置详解
    javascript实现的网页打印
    C#实现新建文件并写入内容
    nodeJs学习过程之认识nodejs
    windows下nodejs与coffeeScript环境搭建
    javascript/css压缩工具---yuicompressor使用方法
    verilog描述表决器的两种方式简易分析
    verilog阻塞与非阻塞的初步理解(二)
    verilog阻塞与非阻塞的初步理解(一)
    FIFO学习心得
  • 原文地址:https://www.cnblogs.com/gtsup/p/6999932.html
Copyright © 2011-2022 走看看