New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

cheerio-httpcli

Package Overview
Dependencies
Maintainers
1
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cheerio-httpcli - npm Package Compare versions

Comparing version 0.6.3 to 0.6.4

5

CHANGELOG.md

@@ -0,1 +1,6 @@

# 0.6.4 (2016-02-05)
* `fetch()`時に`get-param`を省略して`encode`を指定した時の引数調整がおかしかったのを修正
* `fetch()`のエンコーディング指定オプションの説明をREADME.mdに追加
# 0.6.3 (2016-02-01)

@@ -2,0 +7,0 @@

3

example/sync.js

@@ -16,2 +16,5 @@ #!/usr/bin/env node

// [重要] google検索の場合はfollowMetaRefreshをfalseにする(README.md参照)
client.followMetaRefresh = false;
console.log('--- Bingで検索 ---');

@@ -18,0 +21,0 @@ var result1 = client.fetchSync('http://www.bing.com/search', { q: word });

@@ -437,3 +437,9 @@ /*eslint key-spacing:0, dot-notation:0*/

callback = encode;
encode = null;
if (typeOf(param) === 'string') {
// 第3引数が文字列 => paramが省略されてencodeが指定されている
encode = param;
param = null;
} else {
encode = null;
}
} else if (typeOf(param) === 'function') {

@@ -440,0 +446,0 @@ callback = param;

2

package.json
{
"name": "cheerio-httpcli",
"version": "0.6.3",
"version": "0.6.4",
"description": "http client module with cheerio & iconv(-lite) & promise",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -27,2 +27,26 @@ # cheerio-httpcli - Node.js用WEBスクレイピングモジュール

## サンプル
```js
var client = require('cheerio-httpcli');
// Googleで「node.js」について検索する。
var word = 'node.js';
client.fetch('http://www.google.com/search', { q: word }, function (err, $, res, body) {
// レスポンスヘッダを参照
console.log(res.headers);
// HTMLタイトルを表示
console.log($('title').text());
// リンク一覧を表示
$('a').each(function (idx) {
console.log($(this).attr('href'));
});
});
```
同梱の「example/google.js」はGoogle検索結果の一覧を取得するサンプルです。参考にしてください。
## インストール

@@ -66,3 +90,3 @@

### fetch(url[, get-param, callback])
### fetch(url[, get-param, encode, callback])

@@ -78,28 +102,31 @@ `url`で指定したWEBページをGETメソッドで取得し、文字コードの変換とHTMLパースを行い`callback`関数に返します。

GET時にパラメータを付加する場合は第2引数の`get-param`に連想配列で指定します。
#### 各種引数の指定
##### サンプル
* GET時にパラメータ(`?foo=bar&hoge=fuga`)を付加する場合は第2引数の`get-param`に連想配列で指定します。
* 予め取得対象のWEBページのエンコーディングが分かっている場合は`encode`に`sjis`や`euc-jp`などの文字列をセットすることで自動判定による誤判定(滅多に発生しませんが)を防止することができます。
* `get-param`、`encode`、場合によっては`callback`も省略可能です。
```js
var client = require('cheerio-httpcli');
```js
// get-paramとencodeを省略 => GETパラメータ指定なし & エンコーディング自動判定
client.fetch('http://hogehoge.com/fuga.html', function (err, $, res, body) {
...
});
// Googleで「node.js」について検索する。
var word = 'node.js';
// get-paramを省略 => GETパラメータ指定なし & エンコーディング指定(sjis)
client.fetch('http://hogehoge.com/fuga.html', 'sjis', function (err, $, res, body) {
...
});
client.fetch('http://www.google.com/search', { q: word }, function (err, $, res, body) {
// レスポンスヘッダを参照
console.log(res.headers);
// encodeを省略 => GETパラメータ指定(?foo=bar) & エンコーディング自動判定
client.fetch('http://hogehoge.com/fuga.html', { foo: 'bar' }, function (err, $, res, body) {
...
});
// HTMLタイトルを表示
console.log($('title').text());
// url以外全部省略 => GETパラメータ指定なし & エンコーディング自動判定 & プロミス形式(後述)
client.fetch('http://hogehoge.com/fuga.html')
.then(function (result) {
...
});
```
// リンク一覧を表示
$('a').each(function (idx) {
console.log($(this).attr('href'));
});
});
```
同梱の「example/google.js」はGoogle検索結果の一覧を取得するサンプルです。参考にしてください。
#### プロミス形式での呼び出し

@@ -106,0 +133,0 @@

@@ -362,3 +362,3 @@ /*eslint-env mocha*/

it('#ダウンロードマネージャー未設定', function (done) {
it('ダウンロードマネージャー未設定', function (done) {
cli.download.removeAllListeners('ready');

@@ -365,0 +365,0 @@ cli.fetch(helper.url('img', 'index'), function (err, $, res, body) {

@@ -99,2 +99,26 @@ /*eslint-env mocha*/

});
it('fetch時にエンコーディング指定 => shift_jisとして処理される', function (done) {
var url = helper.url('unknown', 'shift_jis');
cli.fetch(url, {}, 'sjis', function (err, $, res, body) {
assert.deepEqual($.documentInfo(), {
url: url,
encoding: 'sjis'
});
assert($('title').text() === '1');
done();
});
});
it('fetch時にエンコーディング指定(param省略) => shift_jisとして処理される', function (done) {
var url = helper.url('unknown', 'shift_jis');
cli.fetch(url, 'sjis', function (err, $, res, body) {
assert.deepEqual($.documentInfo(), {
url: url,
encoding: 'sjis'
});
assert($('title').text() === '1');
done();
});
});
});

@@ -10,19 +10,89 @@ /*eslint-env mocha*/

describe('redirect', function () {
describe('30x', function () {
it('documentInfoにリダイレクト先のURLが登録される', function (done) {
var url = helper.url('manual', 'euc-jp');
cli.fetch(helper.url('~redirect'), function (err, $, res, body) {
assert($.documentInfo().url === url);
done();
describe('async', function () {
describe('30x', function () {
it('documentInfoにリダイレクト先のURLが登録される', function (done) {
var url = helper.url('manual', 'euc-jp');
cli.fetch(helper.url('~redirect'), function (err, $, res, body) {
assert($.documentInfo().url === url);
done();
});
});
it('POST送信後にクッキーがセットされリダイレクト先に飛ぶ', function (done) {
var url = helper.url('manual', 'euc-jp');
cli.fetch(helper.url('form', 'utf-8') + '?reset_trace_route', function (err, $, res, body) {
$('form[name=login]').submit(function (err, $, res, body) {
assert(typeOf(res.cookies) === 'object');
assert(res.cookies.user === 'guest');
assert($.documentInfo().url === url);
assert.deepEqual(JSON.parse(res.headers['trace-route']), [
'/form/utf-8.html?reset_trace_route',
'/~redirect',
'/manual/euc-jp.html'
]);
done();
});
});
});
});
it('POST送信後にクッキーがセットされリダイレクト先に飛ぶ', function (done) {
var url = helper.url('manual', 'euc-jp');
cli.fetch(helper.url('form', 'utf-8') + '?reset_trace_route', function (err, $, res, body) {
$('form[name=login]').submit(function (err, $, res, body) {
assert(typeOf(res.cookies) === 'object');
assert(res.cookies.user === 'guest');
describe('meta refresh', function () {
beforeEach(function () {
cli.followMetaRefresh = true;
});
it('meta[refresh]タグを検知してリダイレクト先に飛ぶ(絶対URL)', function (done) {
var url = helper.url('refresh', 'absolute');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === helper.url('~info'));
assert(res.headers.referer === url);
done();
});
});
it('meta[refresh]タグを検知してリダイレクト先に飛ぶ(相対URL)', function (done) {
var url = helper.url('refresh', 'relative');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === helper.url('~info'));
assert(res.headers.referer === url);
done();
});
});
it('followMetaRefresh:false => meta[refresh]タグがあってもリダイレクトしない', function (done) {
cli.followMetaRefresh = false;
var url = helper.url('refresh', 'absolute');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === url);
assert.deepEqual(JSON.parse(res.headers['trace-route']), [
done();
});
});
it('IE条件コメント内のmeta[refresh]タグはリダイレクト対象外', function (done) {
var url = helper.url('refresh', 'ie-only');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === url);
assert($('title').text() === 'Refresh IE only');
done();
});
});
});
});
describe('sync', function () {
describe('30x', function () {
it('documentInfoにリダイレクト先のURLが登録される', function () {
var url = helper.url('manual', 'euc-jp');
var result = cli.fetchSync(helper.url('~redirect'));
assert(result.$.documentInfo().url === url);
});
it('POST送信後にクッキーがセットされリダイレクト先に飛ぶ', function (done) {
var url = helper.url('manual', 'euc-jp');
cli.fetch(helper.url('form', 'utf-8') + '?reset_trace_route', function (err, $, res, body) {
var result = $('form[name=login]').submitSync();
assert(typeOf(result.response.cookies) === 'object');
assert(result.response.cookies.user === 'guest');
assert(result.$.documentInfo().url === url);
assert.deepEqual(JSON.parse(result.response.headers['trace-route']), [
'/form/utf-8.html?reset_trace_route',

@@ -36,42 +106,34 @@ '/~redirect',

});
});
describe('meta refresh', function () {
beforeEach(function () {
cli.followMetaRefresh = true;
});
describe('meta refresh', function () {
beforeEach(function () {
cli.followMetaRefresh = true;
});
it('meta[refresh]タグを検知してリダイレクト先に飛ぶ(絶対URL)', function (done) {
var url = helper.url('refresh', 'absolute');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === helper.url('~info'));
assert(res.headers.referer === url);
done();
it('meta[refresh]タグを検知してリダイレクト先に飛ぶ(絶対URL)', function () {
var url = helper.url('refresh', 'absolute');
var result = cli.fetchSync(url);
assert(result.$.documentInfo().url === helper.url('~info'));
assert(result.response.headers.referer === url);
});
});
it('meta[refresh]タグを検知してリダイレクト先に飛ぶ(相対URL)', function (done) {
var url = helper.url('refresh', 'relative');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === helper.url('~info'));
assert(res.headers.referer === url);
done();
it('meta[refresh]タグを検知してリダイレクト先に飛ぶ(相対URL)', function () {
var url = helper.url('refresh', 'relative');
var result = cli.fetchSync(url);
assert(result.$.documentInfo().url === helper.url('~info'));
assert(result.response.headers.referer === url);
});
});
it('followMetaRefresh:false => meta[refresh]タグがあってもリダイレクトしない', function (done) {
cli.followMetaRefresh = false;
var url = helper.url('refresh', 'absolute');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === url);
done();
it('followMetaRefresh:false => meta[refresh]タグがあってもリダイレクトしない', function () {
cli.followMetaRefresh = false;
var url = helper.url('refresh', 'absolute');
var result = cli.fetchSync(url);
assert(result.$.documentInfo().url === url);
});
});
it('IE条件コメント内のmeta[refresh]タグはリダイレクト対象外', function (done) {
var url = helper.url('refresh', 'ie-only');
cli.fetch(url, function (err, $, res, body) {
assert($.documentInfo().url === url);
assert($('title').text() === 'Refresh IE only');
done();
it('IE条件コメント内のmeta[refresh]タグはリダイレクト対象外', function () {
var url = helper.url('refresh', 'ie-only');
var result = cli.fetchSync(url);
assert(result.$.documentInfo().url === url);
assert(result.$('title').text() === 'Refresh IE only');
});

@@ -78,0 +140,0 @@ });

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc