2016-11-16 11 views
0

Ich versuche, die HTML validator API zu verwenden. Die Curl-Beispiele funktionieren gut für mich und ich kann sie im Knoten als Kindprozess finden. Hier ist der Code dafür:Node.js entspricht dieser Curl-Anfrage

var command = ('curl -H "Content-Type:text/html; charset=utf-8" --data-binary @' + file + 
' https://validator.w3.org/nu/?out=json'); 

exec(command, function(err1, out, err2) { 
    console.log(out); 
    console.log('done'); 
}); 

Wenn ich jedoch versuchte, eine Standard-HTTP-Anfrage zu verwenden, konnte ich es nicht funktionieren. Ich habe es mit der Unirest Bibliothek für Node versucht. Hier ist der Code, den ich verwenden:

var source = '<html><head><title>a</title></head><body>a</body></html>'; 
var url = 'http://validator.w3.org/nu/?out=json'; 


var Request = unirest.post(url); 
Request.headers({'Content-Type': 'text/html', 'charset': 'utf-8'}); 
Request.send(source); 
Request.end(res => console.log(res)); 

Der Antworttext ist nicht definiert und die Antwort raw_body ist leer. Ich weiß nicht, was ich falsch mache und würde mich über jede Hilfe freuen.

Antwort

1

Scheint validator.w3.org nicht auf Anfragen ohne user-agent Header zu reagieren. Fügen Sie diesen Header hinzu:

Request.headers({'Content-Type': 'text/html; charset=utf-8', 'user-agent': 'Node.js'}); 

Oder verwenden Sie das gewünschte Useragent.

+0

Dieser hat es getan. Vielen Dank. – Yulek

+0

Super-Agent muss automatisch einen User-Agent-Header hinzufügen, was erklären würde, warum mein Beispiel "einfach funktioniert", ohne etwas Besonderes tun zu müssen. – Kevin

+0

@Kevin Ja, viele HTTP-Clients fügen Benutzer-Agent-Header automatisch zur Kompatibilität hinzu (mit Websites wie w3.org). Curl macht das auch, weshalb der curl-Befehl in der Frage funktioniert. – tcooc

0

Mit Super-Agent:

const request = require('superagent'); 
const body = '<html><head><title>a</title></head><body>a</body></html>'; 
request.post('https://validator.w3.org/nu/?out=json') 
    .set('Content-Type', 'text/html; charset=utf-8') 
    .send(body) 
    .end((err, res) => { 
     console.log('got body: ' + JSON.stringify(res.body)); 
    });