2016-03-20 8 views
3

Ich möchte eine HTTP POST aus einem iMacro zu einem API-Endpunkt tun. Effektiv, etwa wie folgt:iMacros Http POST zu API-Endpunkt

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

In iMacros, könnte es etwa so aussehen:

my-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(); 
    } 

Aber die oben scheint wie ein langer und schwieriger Weg zu tun Dies. Wenn es überhaupt funktioniert.

Gibt es eine kürzere, direktere oder effizientere Lösung?

+0

Vielleicht 'XMLHttpRequest()' statt 'Funktion post()' schicken? – Shugar

Antwort

1

Sie können http://wiki.imacros.net/iMacros_for_Firefox mit Javascript und jquery verwenden. Dann ist es einfach mit jeder Form, erhalten und Post-Anfrage-Sache.

Kleines Javascript Beispiel mit jquery und imacros für Firefox:

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;

0

Wenn Sie mehr saubere und effiziente Lösung suchen sie müssen wissen, dass JavaScript nur in Firefox iMacros-Plugin funktioniert. Und dieses Skript wird nicht mit iMacros Plugin-Version 9.0.3 arbeiten

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

Kein Zugriff auf die Homepage zu DOM von Javascript in JS-Dateien (Fenster, Inhalt Objekte) oder Makros (URL GOTO javascript =: ...)

Es ist besser, die API-Endpunktmethode in GET zu ändern. Als nächstes können Sie iMacros .iim Datei erstellen, die einige Eigenschaften von Web-Seite extrahieren und durch GET-Methode zu dem API-Endpunkt wie 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}}