# http-clientp

> Simplified HTTP/HTTPS/PROXY request client.

Latest version **1.0.38** (published 2023-06-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install http-clientp
pnpm add http-clientp
yarn add http-clientp
bun add http-clientp
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.38 |
| Published | 2023-06-16 |
| First published | 2016-12-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 25.5 KB |
| Known vulnerabilities | 0 (+2 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | jiang19210 |
| Maintainers | xiaoming19210 |
| Keywords | http-client, httpclient, client, http, proxy, http-clientp, request |

## Links

- npm: https://www.npmjs.com/package/http-clientp
- Repository: https://github.com/jiang19210/http-clientp
- Homepage: https://github.com/jiang19210/http-clientp#readme
- Issues: https://github.com/jiang19210/http-clientp/issues
- npm.io page: https://npm.io/package/http-clientp

## Dependencies (3)

- [debug](https://npm.io/package/debug.md) 4.1.1
- [iconv-lite](https://npm.io/package/iconv-lite.md) 0.4.15
- [https-proxy-agent](https://npm.io/package/https-proxy-agent.md) 2.2.1

## Alternatives

- [launchdarkly-js-client-sdk](https://npm.io/package/launchdarkly-js-client-sdk.md) — 2.5M weekly downloads
- [@elastic/elasticsearch](https://npm.io/package/@elastic/elasticsearch.md) — 2.1M weekly downloads
- [@c8y/client](https://npm.io/package/@c8y/client.md) — 15.3K weekly downloads
- [@signaldb/maverickjs](https://npm.io/package/@signaldb/maverickjs.md) — 1.7K weekly downloads
- [@bbc/http-transport-cache](https://npm.io/package/@bbc/http-transport-cache.md) — 1.2K weekly downloads

## Recent versions

- 1.0.38 (latest) — 2023-06-16
- 1.0.37 — 2023-05-28
- 1.0.36 — 2022-12-21
- 1.0.35 — 2022-11-07
- 1.0.34 — 2022-10-27
- 1.0.33 — 2022-10-27
- 1.0.32 — 2022-10-27
- 1.0.31 — 2020-01-17
- 1.0.30 — 2020-01-16
- 1.0.29 — 2020-01-16
- 1.0.28 — 2020-01-13
- 1.0.27 — 2019-11-29
- 1.0.26 — 2019-08-09
- 1.0.25 — 2019-05-29
- 1.0.24 — 2019-05-29
- … 47 more at https://npm.io/package/http-clientp/versions

## README

# http-clientp
* 支持基于http、https、proxy的请求
* 支持回调函数附带数据
* 支持设置超时时间
* 支持使用函数返回代理
* 具体用法见test/test.js
* 运行test请先安装mocha
* 运行test请启动本地8888端口的代理,fiddler或者charles或者其他代理都可以

****
httpcontext模板格式：
````
{
	"request":{
		"proxy":{"host":"127.0.0.1","port":8888},//设置请求代理，共两种设置方式，任选其一即可
		"http_proxy":"http://127.0.0.1:8888",    //设置请求代理，共两种设置方式，任选其一即可
		"headers":{},		
		"encode":true,   //是否对url进行encodeURI操作，默认为true
		"timeout":"1000", //请求超时
		"postdata":"a=1&b=1"    //post请求参数,
		 options: { 
                    method: 'GET',
                    path: 'https://www.npmjs.com/package/http-clientp' 
                   }
	},
	"response":{
		"charset":"",//返回编码
		"statusCode":200
	},
	"data":{             //附带数据
	    "key":"value",
	    "key1":"value1"
	}
}
````
*****
* 基础用法
````
var options = {
    "method":"GET",
    "path":"https://www.baidu.com/"
};
httpClient.request(options, function (err, body, res, httpContext) {
    console.log(res.statusCode)
});
****GET
var httpcontext = httpClient.build_httpcontext('GET', {'key': 'value', 'url': 'https://www.baidu.com/'}, null, {'host': '127.0.0.1', 'port': 8888}, 1000);
httpClient.request(httpcontext.request.options, function (err, body, res, httpContext) {
    console.log(res.statusCode);
    console.log(httpContext.data.key);
    console.log(httpContext.data.url);
}, httpcontext);
****POST
var httpcontext = httpClient.build_httpcontext('POST', {
    'key': 'value',
    'url': test_url
}, 'a=1&b=2&c=3', {'host': '127.0.0.1', 'port': 8888}, 1000);
httpClient.request(httpcontext.request.options, function (err, body, res, httpContext) {
    console.log(res.statusCode);
    console.log(httpContext.data.key);
    console.log(httpContext.data.url);
}, httpcontext);
````
* get请求
````
 httpClient.get('https://www.baidu.com/', function (err, body, res, httpContext) {
    console.log(res.statusCode)
 });
 ````
 * 超时请求
 ````
 var httpcontext = {'request': {'timeout': 1000}};
 httpClient.get(test_url, function (err, body, res, httpContext) {
     console.log(res.statusCode)
 }, httpcontext);
 ````
 * 代理请求
 ````
 var httpcontext = {'request': {'proxy': {'host': '127.0.0.1', 'port': 8888}}};
 httpClient.get(test_url, function (err, body, res, httpContext) {
     console.log(res.statusCode)
 }, httpcontext);
 ````
 * 代理请求，http_proxy方式
 ````
 var httpcontext = {'request': {'http_proxy': 'http://127.0.0.1:8888'}};
 httpClient.get(test_url, function (err, body, res, httpContext) {
     console.log(res.statusCode)
 }, httpcontext);
 ````
* 代理请求，http_proxy方式,支持proxy auth
 ````
 var httpcontext = {'request': {'http_proxy': 'http://username:password@127.0.0.1:8888'}};
 httpClient.get(test_url, function (err, body, res, httpContext) {
     console.log(res.statusCode)
 }, httpcontext);
 ````
 * 将请求的数据附带到结果中
 ````
 var httpcontext = httpClient.build_httpcontext('GET', {'key': 'value', 'city':'北京'});
 httpClient.get(test_url, function (err, body, res, httpContext) {
     console.log(res.statusCode)
     console.log(httpContext.data.key)
     console.log(httpContext.data.city)
 }, httpcontext);
 ````
 * 根据同步函数设置代理
 ````
 var httpcontext = httpClient.build_httpcontext('GET', {'key': 'value', 'url': test_url});
 httpcontext.proxymodel = 'dynamic';
 httpcontext.callback = function (httpcontext) {
     console.log(httpcontext.res.statusCode)
 };
 httpClient.request_select_proxy(httpcontext, function (callback) {
     var http_proxy = syncProxy();//根据函数获取代理,代理是动态获取的时候可以用此种方法
     httpcontext.request.http_proxy = http_proxy;
     callback(httpcontext);
 });
 function syncProxy() {
     return '127.0.0.1:8888';
 }
 ````
  * 根据异步函数设置代理
  ````
  var httpcontext = httpClient.build_httpcontext('GET', {'key': 'value', 'url': test_url});
  httpcontext.proxymodel = 'dynamic';
  httpcontext.callback = function (httpcontext) {
      console.log(httpcontext.res.statusCode)
  };
  httpClient.request_select_proxy(httpcontext, function (callback) {
      asyncProxy(function (http_proxy) {
          httpcontext.request.http_proxy = http_proxy;
          callback(httpcontext);
      })
  });
  function asyncProxy(calback) {
      calback(proxy_url);
  }
  ````
  * 设置头
  ````
  var httpContext = {'request': {'headers': {"Cookie": "a=a"}}};
  httpClient.get({'path': test_url, 'headers': {"Cookie": "b=b"}}, function (err, body, res, httpContext) {
      console.log(httpContext.request.headers.Cookie)
      console.log(res.statusCode)
  }, httpContext);
  ````
  ````
  var httpClient = require('../lib/http-clientp');
  var fs = require('fs');
  var httpcontext = {
      'request': {
          'http_proxy': 'http://127.0.0.1:8888',
          'headers': {'Content-Type': 'image/jpeg;charset=UTF-8', 'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8'}
      }, 'response': {'charset': 'buffer'}
  };
  httpClient.get('http://202.109.191.178:8081/wt-web/captcha?0.4344325280246917', function (err, body, res, httpContext) {
      fs.writeFileSync("/Users/jgm/Downloads/chrome/captcha.png", body);
  }, httpcontext);
  ````

---
_Source: https://npm.io/package/http-clientp · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
