【问题标题】:iMacros Http POST to API endpointiMacros Http POST 到 API 端点
【发布时间】:2016-03-20 00:16:56
【问题描述】:

我想从 iMacro 内部到 API 端点执行 HTTP POST。实际上,类似于以下内容:

curl -d "data=foo" http://example.com/API

在 iMacros 中,它可能看起来像这样:

我的 imacro.iim
VERSION BUILD=10.4.28.1074
TAB T=1
URL GOTO=javascript:post('http://example.com/API', {data: 'foo'});
  function post(path, params, method) {
    // Reference: http://stackoverflow.com/a/133997/1640892
    method = method || "post";
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for (var key in params) {
      if (params.hasOwnProperty(key)) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
      }
    }
    document.body.appendChild(form);
    form.submit();
  }

但上述方法似乎是一个漫长而困难的方法。如果它甚至可以工作。

是否有更短、更直接或更有效的解决方案?

【问题讨论】:

  • 也许是XMLHttpRequest() 而不是function post()

标签: post http-post imacros


【解决方案1】:

您可以将http://wiki.imacros.net/iMacros_for_Firefox 与javascript 和jquery 一起使用。然后很容易使用任何形式,获取和发布请求。

带有 jquery 和 imacros for firefox 的小型 javascript 示例:

function loadScriptFromURL(url) {
    var request = Components.classes['@mozilla.org/xmlextras/xmlhttprequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest),
        async = false;
    request.open('GET', url, async);
    request.send();
    if (request.status !== 200) {
        var message = 'an error occurred while loading script at url: ' + url + ', status: ' + request.status;
        iimDisplay(message);
        return false;
    }
    eval(request.response);
    return true;
}

loadScriptFromURL('https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js');
$ = window.$,
JQuery = window.JQuery;

【讨论】:

    【解决方案2】:

    如果您正在寻找更干净、更高效的解决方案,则需要知道 JavaScript 仅适用于 Firefox iMacros 插件。此脚本不适用于 iMacros 插件版本 9.0.3

    http://wiki.imacros.net/iMacros_for_Firefox#Version_History

    无法从 .js 文件(窗口、内容)中的 javascript 访问网页 DOM 对象)或宏(URL GOTO=javascript:...)

    最好将 API 端点方法更改为 GET。接下来,您可以创建 iMacros .iim 文件,该文件从网页中提取一些属性并通过 GET 方法将其发送到 API 端点,例如 http://localhost/endpoint?param1=value1&param2=value2..

    ' extract header
    TAG POS=1 TYPE=span ATTR=id:header EXTRACT=txt
    SET !VAR1 header={{!EXTRACT}}
    SET !EXTRACT NULL
    
    ' extract phone
    TAG POS=1 TYPE=span ATTR=class:phone EXTRACT=txt
    SET !VAR1 {{!VAR1}}&phone={{!EXTRACT}}
    SET !EXTRACT NULL
    
    ' ///open new tab
    TAB OPEN
    TAB T=2
    ' ///Basic Auth credentials to API Endpoint
    ONLOGIN USER=XXX PASSWORD=XXX
    URL GOTO=http://localhost:8080/endpoint?{{!VAR1}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      相关资源
      最近更新 更多