2016-09-04 11 views
0

次のjavascriptコードを実行しようとしています。nodejs - yahoo.comの場合、バイナリデータを返すrequest.get(url)

request = require('request') 
request.get('https://www.yahoo.com',function(err,res,body){ console.log(err ? err.message : body) }) 

しかしhtml文字列が期待されているのに対し、それはバイナリデータを記録しています。

最初の引数を別のURL、たとえばhttps://www.google.comと置き換えた場合、同じコードはhtmlという応答を返します。

私は、それは両方のケースで正しいHTMLレスポンスを返すコード

require('open-uri') 
puts open('https://www.yahoo.com').read 

以下とRubyで同じことを試してみました。

nodejsのrequestパッケージを使用している間に何かが見当たりません。

答えて

1

gzipでエンコードされたHTML文字列が表示されます。解凍された本体を取得するには、gzipオプション(docs)を使用してください。

request.get({url: 'https://www.yahoo.com', gzip: true}, function(err,res,body){ console.log(err ? err.message : body) }) 
+0

私たちはライブラリが単独で処理することを期待している:D は問題を解決しました。しかし、それはなぜGoogleと一緒に働いているのですか? –

+1

私はあなたのリクエストのヘッダ 'Accept-encoding'を見ていますが、yahooは見ません。ヘッダをデバッグすると、 'gzip:true'がヘッダに' accept-encoding:gzip、deflate'を追加することがわかります。 –

関連する問題