http-cookie-agent

Allows cookies with every Node.js HTTP clients.

Usage no npm install needed!

<script type="module">
  import httpCookieAgent from 'https://cdn.skypack.dev/http-cookie-agent';
</script>

README

HTTP Cookie Agent

HTTP Cookie Agent

npm license standard-readme compliant

Allows cookies with every Node.js HTTP clients (e.g. axios, node-fetch).

Table of Contents

Install

npm install http-cookie-agent tough-cookie

Usage

Pass http-cookie-agent to HTTP clients instead of http(s).Agent.

import { CookieJar } from 'tough-cookie';
import { HttpCookieAgent, HttpsCookieAgent, MixedCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

const httpAgent = new HttpCookieAgent({ jar });

// To access via HTTPS, use HttpsCookieAgent instead.
const httpsAgent = new HttpsCookieAgent({ jar });

// If the client library cannot switch Agents based on the protocol, use MixedCookieAgent instead.
const mixedAgent = new MixedCookieAgent({ jar });

// Pass agent to HTTP client.
client.request('https://example.com', { agent: httpAgent });

Supported libraries

http / https / axios / node-fetch / got** / superagent** / request** / needle / phin / @hapi/wreck / urllib etc.

** The library supports cookies by default. You may not need http-cookie-agent.

Using with HTTP clients

See also examples for more details.

http / https

import https from 'https';
import { CookieJar } from 'tough-cookie';
import { HttpsCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();
const agent = new HttpsCookieAgent({ jar });

https.get('https://example.com', { agent }, (res) => {
  // ...
});

axios

import axios from 'axios';
import { CookieJar } from 'tough-cookie';
import { HttpCookieAgent, HttpsCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

const client = axios.create({
  httpAgent: new HttpCookieAgent({ jar }),
  httpsAgent: new HttpsCookieAgent({ jar }),
});

await client.get('https://example.com');

node-fetch

import fetch from 'node-fetch';
import { CookieJar } from 'tough-cookie';
import { HttpCookieAgent, HttpsCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

const httpAgent = new HttpCookieAgent({ jar });
const httpsAgent = new HttpsCookieAgent({ jar });

await fetch('https://example.com', {
  agent: ({ protocol }) => {
    return protocol === 'https:' ? httpsAgent : httpAgent;
  },
});

got

:warning: got supports cookies by default. You may not need http-cookie-agent.

See https://github.com/sindresorhus/got/tree/v11.8.2#cookies.

import got from 'got';
import { CookieJar } from 'tough-cookie';
import { HttpCookieAgent, HttpsCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

const client = got.extend({
  agent: {
    http: new HttpCookieAgent({ jar }),
    https: new HttpsCookieAgent({ jar }),
  },
});

await client('https://example.com');

superagent

:warning: superagent supports cookies by default. You may not need http-cookie-agent.

See https://github.com/visionmedia/superagent/blob/v6.1.0/docs/index.md#saving-cookies.

import superagent from 'superagent';
import { CookieJar } from 'tough-cookie';
import { MixedCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();
const mixedAgent = new MixedCookieAgent({ jar });

const client = superagent.agent().use((req) => req.agent(mixedAgent));

await client.get('https://example.com');

request

:warning: request supports cookies by default. You may not need http-cookie-agent.

See https://github.com/request/request/tree/v2.88.1#examples.

import request from 'request';
import { CookieJar } from 'tough-cookie';
import { MixedCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

const client = request.defaults({
  agent: new MixedCookieAgent({ jar }),
});

client.get('https://example.com', (_err, _res) => {
  // ...
});

needle

import needle from 'needle';
import { CookieJar } from 'tough-cookie';
import { MixedCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

await needle('get', 'https://example.com', {
  agent: new MixedCookieAgent({ jar }),
});

phin

import phin from 'phin';
import { CookieJar } from 'tough-cookie';
import { MixedCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

await phin({
  url: 'https://example.com',
  core: {
    agent: new MixedCookieAgent({ jar }),
  },
});

@hapi/wreck

import Wreck from '@hapi/wreck';
import { CookieJar } from 'tough-cookie';
import { HttpCookieAgent, HttpsCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

const client = Wreck.defaults({
  agents: {
    http: new HttpCookieAgent({ jar }),
    https: new HttpsCookieAgent({ jar }),
    httpsAllowUnauthorized: new HttpsCookieAgent({ jar }),
  },
});

await client.get('https://example.com');

urllib

import urllib from 'urllib';
import { CookieJar } from 'tough-cookie';
import { HttpCookieAgent, HttpsCookieAgent } from 'http-cookie-agent';

const jar = new CookieJar();

const client = urllib.create({
  agent: new HttpCookieAgent({ jar }),
  httpsAgent: new HttpsCookieAgent({ jar }),
});

await client.request('https://example.com');

Using with another Agent library

If you want to use another Agent library, wrap the agent in createCookieAgent.

import https from 'https';
import { HttpsAgent as KeepAliveAgent } from 'agentkeepalive';
import { CookieJar } from 'tough-cookie';
import { createCookieAgent } from 'http-cookie-agent';

const Agent = createCookieAgent(KeepAliveAgent);

const jar = new CookieJar();
const agent = new Agent({ jar });

https.get('https://example.com', { agent }, (res) => {
  // ...
});

Contributing

PRs accepted.

License

MIT (c) 3846masa