2016-11-16 8 views
0

私はHTML validator APIを使用しようとしています。カールの例は私のためにうまく動作し、子プロセスとしてNode内で見つけることができます。このカール要求に相当するNode.js

ただし、標準の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 Yeah、多くのhttpクライアントは、(w3.orgのようなサイトで)互換性のためにユーザーエージェントヘッダーを自動的に追加します。 Curlもこれを行い、質問の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)); 
    }); 
関連する問題