2016-11-16 2 views
0

HTML validator API을 사용하려고합니다. 말장난 예제는 나를 위해 잘 작동하고 그들을 자식 프로세스로 노드에서 찾을 수 있습니다. 다음은 그 코드입니다 :이 컬 요청에 해당하는 Node.js

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'); 
}); 

그러나 표준 HTTP 요청을 사용하려고하면 작동하지 않습니다. 나는 노드를 위해 Unirest 라이브러리와 함께 그것을 시도했다. 저는 여기에 사용되는 코드는 다음과 같습니다

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)); 

응답 몸은 정의되지 응답 raw_body가 비어 있습니다. 내가 뭘 잘못하고 어떤 도움을 주실지 모르겠다. 슈퍼 에이전트와

답변

1

는 validator.w3.org가 user-agent 헤더없이 요청에 응답하지 않습니다 보인다. 이 헤더 추가 :

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

또는 원하는 사용자 에이전트를 사용하십시오.

+0

이렇게했습니다. 감사. – Yulek

+0

슈퍼 에이전트는 자동으로 사용자 에이전트 헤더를 추가해야합니다. 그러면 내 사례가 특별한 일을하지 않고도 "방금 효과가 있었던"이유를 설명 할 수 있습니다. – Kevin

+0

@Kevin 예, 많은 http 클라이언트가 w3.org와 같은 사이트와의 호환성을 위해 자동으로 사용자 에이전트 헤더를 추가합니다. Curl도이 작업을 수행하여 문제의 말풍선 명령이 왜 효과가 있었는지 설명합니다. – tcooc

0

:

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)); 
    }); 
관련 문제