2017-05-09 2 views
3

Hier ist der Code auf dem Arduino läuft, mit der Webduino Bibliothek:Webduino Empfangen von curl POST params aber nicht von Knoten

void handleConfigRequest(WebServer &server, WebServer::ConnectionType type, char *, bool) { 

// POST request to receive new config 
if (type == WebServer::POST) { 

    bool repeat; 
    char name[16], value[50]; 

    do { 
     // Returns false when no more params to read from the input 
     repeat = server.readPOSTparam(name, 16, value, 50); 

     if (strcmp(name, "dName") == 0) { 
     strcpy(deviceName, value); 
     Serial.println(value); 
     } 
    } while (repeat); 
} 

Dies funktioniert wie erwartet (und druckt „Test“ über serielle), wenn die Ausführung von folgenden von Wölbungen auf der Befehlszeile:

curl http://10.0.1.141/config "dname = Test"

I getestet haben auch ein einfaches H -d TML Form, die auch funktioniert und Druck "Test" über serielle wenn vorgelegt:

<form action="http://10.0.1.141/config"> 
    <input type="text" name="dName" value="test"> 
    <input type="submit" value="Send"> 
</form> 

jedoch die folgende Node.js mit request Code funktioniert nicht:

var options = { 
    url: "http://10.0.1.141/config", 
    headers: { 
     "Content-Type": "application/x-www-form-urlencoded", 
     "Accept": "*/*", 
     "User-Agent": "TestingScript" 
    }, 
    form: {dName: "Test"} 
    } 

    request.post(options, function(error, response, body) { 
    console.log(error, response, body) 
    }) 

den Knoten Code verwenden, Der Arduino bestätigt die HTTP-POST-Anforderung (in diesem Fall durch Blinken einer LED), druckt jedoch nicht "Test" auf seriell.

Ich habe darauf beide curl und mein Knoten Code auf einer requestb.in Seite, und Sie können sehen, dass die Anfragen selbst erscheinen identisch zu sein (die untere ist Locke, die Spitze ist von mir):

Requestbin

Irgendwelche Vorschläge?

+0

Warum verwendet die Knotenversion "https" für den Header "Cf-visitor"? Ist es möglich, dass die Netzwerkanzeige blinkt, aber Webduino eine HTTPS-Anfrage ignoriert? –

+0

Ich sehe nichts im Node-Code, der es HTTPS machen würde - ich denke, dass es mehr damit zu tun hat, wie Requestb.in SSL intern mit Cloudflare – Alfo

+0

verwendet, um User-Agent zu zwingen, "curl/7.51.0" zu erzwingen? –

Antwort

0

Am Ende ersetzte ich den Knoten request Code durch den folgenden jQuery:

$.ajax({ 
    type: "POST", 
    url: "http://10.0.1.141/config", 
    data: {dName: "Test"} 
}, function(data({ 
    console.log(data) 
} 

Welche fein gearbeitet. Ungerade.

+0

Lustig - das gleiche identische Problem passiert, wenn IBM Bluemix ... – Fattie

Verwandte Themen