# request

***

**1. Basic GET Request**

```js
const request = require('request');

request('https://example.com', (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**2. POST Request with Form Data**

```js
const formData = {
  name: 'John Doe',
  email: 'johndoe@example.com'
};

const options = {
  method: 'POST',
  body: formData,
  url: 'https://example.com/submit-form'
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**3. POST Request with JSON Payload**

```js
const payload = {
  name: 'John Doe',
  email: 'johndoe@example.com'
};

const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(payload),
  url: 'https://example.com/submit-json'
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**4. PUT Request**

```js
const payload = {
  name: 'John Doe',
  email: 'johndoe@example.com'
};

const options = {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(payload),
  url: 'https://example.com/update-resource'
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**5. DELETE Request**

```js
const options = {
  method: 'DELETE',
  url: 'https://example.com/delete-resource'
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**6. Streaming Response**

```js
const request = require('request');
const fs = require('fs');

const url = 'https://example.com/large-file';
const writeStream = fs.createWriteStream('large-file.txt');

request(url)
  .on('response', (response) => {
    response.pipe(writeStream);
  })
  .on('error', (error) => {
    console.error(error);
  });
```

**7. Request with Cookies**

```js
const request = require('request');
const cookieJar = request.jar();

const options = {
  url: 'https://example.com',
  jar: cookieJar
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});

// Later, reuse the cookies
const nextOptions = {
  url: 'https://example.com/protected',
  jar: cookieJar
};

request(nextOptions, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**8. Request with Basic Authentication**

```js
const options = {
  url: 'https://example.com/private',
  auth: {
    user: 'username',
    password: 'password'
  }
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**9. Request with Bearer Token**

```js
const options = {
  url: 'https://example.com/api',
  headers: {
    Authorization: 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTA3NzY4MDUsImV4cCI6MTU1MDg2MzIwNSwidXNlciI6InVzZXJuYW1lIn0.X0sxbZ9rc_i7W7-ItvW82k0tVkjC-b2_Y1X8dUxgZ2M'
  }
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**10. Request with Proxy**

```js
const options = {
  url: 'https://example.com',
  proxy: 'http://127.0.0.1:8080'
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**11. Request with Timeout**

```js
const options = {
  url: 'https://example.com',
  timeout: 10000
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**12. Request with SSL Certificate Verification**

```js
const options = {
  url: 'https://example.com',
  strictSSL: false
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**13. Request with Form Data and Files**

```js
const formData = {
  image: fs.createReadStream('image.jpg')
};

const options = {
  url: 'https://example.com/upload',
  formData: formData
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**14. Request with JSON Schema Validation**

```js
const Ajv = require('ajv');
const ajv = new Ajv();

const schema = {
  type: 'object',
  properties: {
    name: { type: 'string' },
    email: { type: 'string' }
  }
};

const options = {
  url: 'https://example.com/submit-json',
  json: true,
  validateResponse: (response, body, callback) => {
    if (ajv.validate(schema, body)) {
      callback();
    } else {
      callback(new Error('Invalid response'));
    }
  }
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**15. Request with Custom Headers**

```js
const options = {
  url: 'https://example.com',
  headers: {
    'X-Custom-Header': 'custom value'
  }
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**16. Request with gzip Compression**

```js
const options = {
  url: 'https://example.com',
  gzip: true
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**17. Request with Custom Body Encoding**

```js
const options = {
  url: 'https://example.com',
  encoding: null
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**18. Request with Cookie Jar**

```js
const request = require('request');
const cookieJar = request.jar();

const url = 'https://example.com';
const options = {
  url: url,
  jar: cookieJar
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    const cookies = cookieJar.getCookies(url);
    console.log(cookies);
  }
});
```

**19. Request with Custom Agent**

```js
const options = {
  url: 'https://example.com',
  agent: new request.Agent({
    maxSockets: 10,
    keepAlive: true
  })
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**20. Request with OAuth2 Authentication**

```js
const OAuth2 = require('oauth').OAuth2;
const oauth2 = new OAuth2('client_id', 'client_secret', 'https://example.com/oauth/authorize', 'https://example.com/oauth/token');

const options = {
  url: 'https://example.com/api',
  oauth: oauth2
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**21. Request with Progress Tracking**

```js
const options = {
  url: 'https://example.com',
  progress: (state) => {
    console.log(state.percent + '%');
  }
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**22. Request with Chunked Encoding**

```js
const options = {
  url: 'https://example.com',
  encoding: null
};

const req = request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});

req.write('first chunk');
req.write('second chunk');
req.end('last chunk');
```

**23. Request with Stream Response**

```js
const options = {
  url: 'https://example.com',
  encoding: null
};

const req = request(options);

req.on('response', (response) => {
  response.pipe(process.stdout);
});

req.on('error', (error) => {
  console.error(error);
});
```

**24. Request with Proxy Agent**

```js
const HttpsProxyAgent = require('https-proxy-agent');

const proxyAgent = new HttpsProxyAgent('http://127.0.0.1:8080');

const options = {
  url: 'https://example.com',
  agent: proxyAgent
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```

**25. Request with Multipart/Form-Data**

```js
const formData = {
  file: fs.createReadStream('file.txt')
};

const options = {
  url: 'https://example.com',
  formData: formData
};

request(options, (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});
```
