【问题标题】:DotNetNuke, PHP, Simulating a remote postback using curlDotNetNuke,PHP,使用 curl 模拟远程回发
【发布时间】:2010-10-09 16:22:54
【问题描述】:

我在 DNN 中有一个页面,例如: http://nolimitswebdesign.com.dnnmax.com/test/tabid/57/ctl/Edit/mid/374/Default.aspx

我需要使用 PHP+Curl 向该页面发送一个发布请求,该请求会修改文本区域的内容并将其保存(就像有人手动修改它并单击该页面上的更新按钮一样)。我怀疑使用 DNN 可能是不可能的。请指教。

【问题讨论】:

    标签: php post curl postback dotnetnuke


    【解决方案1】:

    这是我将如何解决问题的方法,相同的通用技术适用于任何网站。在这种情况下,DNN 只是一个普通的 ASP.Net 网站。先看看点击更新时运行的javascript:

    __doPostBack('dnn$ctr374$EditHTML$cmdUpdate','')
    

    找到 __doPostBack 方法:

    function __doPostBack(eventTarget, eventArgument) {
      if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
      }
    }
    

    这是许多 ASP.Net 表单中使用的标准 doPostBack() 方法。从这里您可以看到您希望使用方法调用中的适当值填写 __EVENTTARGET 和 __EVENTARGUEMENT 隐藏字段并提交表单。

    当然你还需要在文本框的输入控件中填写你实际想要保存的数据。如果您使用 HTML 模块的基本文本框模式,这样做可能会更容易,那么您只需要设置 textarea 的值,而不是弄清楚在 fckEditor 中插入值的位置,技术将是如果站点配置为使用 Telerik 提供程序而不是 fck 提供程序,则仍然可以工作。

    需要注意的一点是,控件名称可能会不时更改,因此您需要确保读取的是事件目标的正确 id,而 textarea 不仅仅是硬编码。

    【讨论】:

    • 评论末尾的链接包含完整的源代码,我相信我已经按照您的建议进行了所有检查,请检查并提供反馈:dotnetnuke.com/Community/Forums/tabid/795/forumid/201/threadid/…
    • @Shaaibi,快速浏览一下链接中的代码对我来说通常是正确的(注意没有 PHP 经验)。我没有看到任何可以保留登录 cookie 的内容,这可能是个问题。对 cookie 进行排序后,我将使用 Live HTTP Headers 从手动发布中捕获所有值,并让脚本使用这些值。然后我会编辑您要更改的值。
    • 我可以在不登录的情况下编辑textarea中的文本,我真的需要维护cookie吗?
    • 如果我需要维护 cookie,我将如何得到它,因为 GET curl 返回的响应是纯 html 并且不包含任何 cookie 数据
    • 在 curl POST 请求中有一个后面添加 javascript 回发代码到目标 url,不记得我在哪里看到的...
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 2011-03-18
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多