# HTTP
# 导入
通过如下方式导入http api
import http from "svr-api/http";
# 方法
/**
* http协议相关API
*/
/**
* 发起一次http请求。
*
* 现在httpClient可以进行一些个性化的设置,在系统设置中进行配置。
*
* 1. HTTPClient连接池大小。系统通过http协议高并发访问第三方服务时需要连接池来提升性能。
* "thresholds.httpClient.maxPoolSize"?: number;
*
* 2. HTTPClient连接空闲时间。http连接池中连接多久不使用时会自动回收,单位毫秒。
* "thresholds.httpClient.maxIDLETime"?: number;
*
* 3. 与服务端建立连接的超时时间,超过该时间停止请求。 "thresholds.httpClient.connectionTimeout"?:
* number;
*
* 4. 多长时间检查一次连接是否可用。 "thresholds.httpClient.periodValidateAfterInactivity"?:number;
*
* 5. 与服务端建立连接时,等待服务端响应数据的超时时间,超过该时间停止请求。
* "thresholds.httpClient.socketTimeout"?: number;
*
* 6. 与服务器连接失败时最大重试次数。 "thresholds.httpClient.retryNum"?: number;
*
* 7. 发起服务的主机连接到每个路由的最大连接数,最大并发。
* "thresholds.httpClient.defaultMaxPerRoute"?: number;
*
*
* @param args 请求的参数。
* @return
*/
export function request(args: HttpRequestArgs): HttpResponseResult;
/**
* 发起一个http请求
*
* 返回{@link CloseableHttpResponse}对象,通过{@link CloseableHttpResponse.getInputStream()}方法
* 获取数据流。
*
* 用于处理较大的响应体,避免内存占用过多。比如下载较大的文件,通过读取数据流,实现流式下载。处
* 理完成后,必需调用{@link CloseableHttpResponse.close()}方法释放资源。
*
* @param args 请求的参数。
*/
export function requestRaw(args: HttpRequestArgs): CloseableHttpResponse;
/**
* 发起一次http请求。
*
* @param url get请求的参数用户自行封装在url中。
*/
export function get(url: string): HttpResponseResult;
/**
* 发起一次post请求。内部会调用request方法。
*
* @param args 请求的参数。
*/
export function post(args: HttpRequestArgs): HttpResponseResult;
/**
* 创建一个可以进行会话的http连接,用于连续的对同一个服务器发起多个请求。
*
* 如果hosts传递的是一组集群地址,那么创建一个对集群访问的http连接,支持故障转移和负载平衡。http连接
* 将会随机访问一个集群节点发送请求,当节点故障(网络异常)会进行重试,若重试则会尝试下一个节点,直
* 到访问到一个可用节点,完成请求服务。
*
* 关于连接池:
*
* 返回的HttpConnection内部会使用连接池,pool以ip:port为基准创建连接,自动回收,系统共享,发请求时,
* 从pool里面获取连接,如果没有就创建,身份在发送请求的时候验证,如果build的时候设置了就用,如果没
* 有,那么通过header或者HttpContext传递。
*
* config可传递的参数,详见:详见:{@link HTTPConnectionConf}。
*
* 应用实例:
* 1. Doris和StartRocks通过Steam Load导入数据,需要对BE集群服务发送put请求。
*
* @param config 如果类型为string或者string[] 表示传递的是{@link HTTPConnectionConf.hosts}。也可以传
* 空,如果传空,那么调用{@link HttpConnection.request(args)}中的url参数必需是完整地址。
*/
export function openHttpConnection(hosts?: string | string[] | HTTPConnectionConf): HttpConnection;
/**
* 构造一个具有指定名称和值的cookie,用于设置cookie到浏览器中。
*
* @param name 名称。
* @param val 值。
* @return
*/
export function createCookie(name: string, val: string): Cookie;
/**
* 返回当前线程所在web线程中的http会话对象。
*
* @param create true to create a new session for this request if necessary; false to return null
* if there's no current session, default is false.
* @returns 返回当前线程所在web线程中的http会话对象。如果当前线程不是web线程,那么返回null。
*/
export function getHttpSession(create?: boolean): HttpSession;
/**
* 返回当前线程所在web线程中的http请求对象。
*
* @returns 返回当前线程所在web线程中的http请求对象。如果当前线程不是web线程,那么返回null。
*/
export function getHttpServletRequest(): HttpServletRequest;
/**
* 返回contextpath。
*
* @return 返回的字符串符合servlet的contextPath规范。没有context返回"",否则返回/开头(没有/结尾)的字符串,如/succezbi。
*/
export function getContextPath(): string;
/**
* 设置url的参数,如果参数不存在,则添加。
*
* @exmaple
* 1. setParameter("http://www.xxxx.com:8080/path/a", "selectId", "123") = "http://www.xxxx.com:8080/path/a?selectId=123"
* 2. setParameter("/path/a", "selectId", "123") = "/path/a?selectId=123"
* 3. setParameter("path/a", "selectId", "123") = "path/a?selectId=123"
* 4. setParameter("http://www.xxxx.com:8080/path/a?id=abc&path=def", "selectId", "123") = "http://www.xxxx.com:8080/path/a?id=abc&path=def&selectId=123"
* 5. setParameter("/path/a?id=abc&path=def", "selectId", "123") = "/path/a?id=abc&path=def&selectId=123"
* @param url
* @param parameterName 参数名称。
* @param parameterValue 参数值,里面的特殊字符不用转义,本方法会对参数做转义。
* @return 返回设置参数后的url。
*/
export function setParameter(url: string, parameterName: string, parameterValue: string): string;
/**
* 将url中指定的参数删除,如果该参数不存在,则什么也不做。
*
* @example
* 1. removeParameter("http://www.xxxx.com:8080/path/a?param1=123","param1") = "http://www.xxxx.com:8080/path/a"
* 2. removeParameter("http://www.xxxx.com:8080/path/a?param1=123¶m2=345","param2") = "http://www.xxxx.com:8080/path/a?param1=123"
* 3. removeParameter("/path/a?param1=123","param1") = "/path/a"
* @param url
* @param parameterName 要删除的参数名称。
* @return 返回删除参数后的url。
*/
export function removeParameter(url: string, parameterName: string): string;
/**
* 获取系统的httpClientManager。
*/
export function getPoolingHttpClientConnectionManager(): any;
# 对象
/**
* 此文件定义一些http客户端的相关的数据类型。
*
*/
/**
* http请求所返回的结果。
*/
declare interface HttpResponseResult {
/**
* 响应状态码,如200,404。
*/
httpCode: number;
/**
* 响应头部信息。
*/
headers: {
[header: string]: any;
}
/**
* 以UTF-8的默认编码返回响应体中实体内容。
*
* 注意:当请求为下载文件时,返回的responseText为null。
*/
responseText: string;
/**
* 返回响应体的内容。
*
* 说明:
*
* 1. 当请求为下载二进制文件时,返回的是byte[]。
* 2. 当请求类型为xml,返回Document对象。
* 3. 当请求类型为json,返回的是json对象。
*/
responseBody?: any;
}
/**
* 一个Http响应对象。
*
* 用于处理较大的响应体,避免内存占用过多。比如下载较大的文件,通过此对象可以通过读取数据流,实现流
* 式下载。处理完成后,必需调用close方法释放资源。
*/
declare interface CloseableHttpResponse extends Closeable {
/**
* 响应状态码,如200,404。
*/
getHttpCode(): number;
/**
* 响应头部信息。
*/
getAllHeaders(): {
[header: string]: any;
}
/**
* 响应体的ContentType,不包含charset。
*/
getContentType(): string;
/**
* 响应体的编码,可能为null
*/
getCharset(): string;
/**
* 返回响应体的数据流。
*/
getInputStream(): InputStream;
}
/**
* 一个Http链接对象,创建一次可多次复用,用于连续多次的向同一个服务器发送请求。
*/
declare interface HttpConnection {
/**
* 发起一个`GET`请求。
*
* @param url url中只需要传递相对地址,如: `/DJXX/main.do`。
* @return
*/
get(url: string): HttpResponseResult;
/**
* 发起一个http请求。
*
* 返回的{@link HttpResponseResult}会把内容读取到内存。
* 用于一些常用的返回较小数据量的请求。
*
* @param args
* @return
*/
request(args: HttpRequestArgs): HttpResponseResult;
/**
* 发起一个http请求
*
* 返回{@link CloseableHttpResponse}对象,通过{@link CloseableHttpResponse.getInputStream()}方法
* 获取数据流。
*
* 用于处理较大的响应体,避免内存占用过多。比如下载较大的文件,通过读取数据流,实现流式下载。处
* 理完成后,必需调用{@link CloseableHttpResponse.close()}方法释放资源。
*
* @param args
*/
requestRaw(args: HttpRequestArgs): CloseableHttpResponse;
}
/**
* 一个Http请求对象。
*/
declare interface HttpRequestArgs {
/**请求的url,必须设置,只需传递相对地址,如: `/DJXX/main.do` */
url: string;
/**可选,默认为`GET`请求,还可以传递`POST` 、 `PUT` 、`DELETE` */
method?: string;
/**
* 请求参数,可为空。
*
* 若为`GET`请求,data需要传递json格式数据,发送请求时会将其拼接到url上;若为post请求,会将data作为
* 请求体进行传递。
*
* 若为`POST`请求,通常需要指定请求头中的`Content-Type`来告诉浏览器如何处理请求和解析数据,根据调用
* 者指定的`Content-Type`的不同,请求体编码规则如下:
*
* 1. `application/x-www-form-urlencoded`,如果data为json,那么自动将json编码为名值对格式发送,若
* data不是json,那么将直接发送给服务器。
* 2. `application/json`或`text/json`,如果data为json,那么直接发送给服务器,否则抛出异常。
* 3. `multipart/form-data`,如果data为json,那么自动编码表单提交格式发送给服务器支持上传文件,若不
* 是json则抛出异常。
* 4. `application/xml`或`text/xml`,如果data为Document对象,那么将转换为xml字符串后发送给服务器,其
* 他格式将直接发送给服务器。
* 5. 其他`Content-Type`,此时直接将调用者传递的内容不加处理直接发送给服务器。
*
* 当调用者未指定`Content-Type`时,此函数会根据data类型自动设定请求的`Content-Type`:
*
* 1. 若`data`为json,且只有一级,内容只含字符串、布尔、数值等基本类型,则`Content-Type`为
* `application/x-www-form-urlencoded;charset=UTF-8`。如:data:{"a":123}。
* 2. 若`data`为json,且json里还嵌套有数组或json对象,则`Content-Type`为
* `application/json;charset=UTF-8`。如:data:{"test1":"test","test2":{"test3":"34","test4":[12,432]}}。
* 3. 若`data`为json且第一级value中包含文件类型,则`Content-Type`为multipart/form-data;charset=UTF-8`。
* 如:data:{"test":file,"xml":xml},此时test默认为文件名,file为文件对象。
* 4. 若`data`为文件类型,则`Content-Type`为`application/octet-stream;charset=UTF-8`。
* 如:data:file,file为文件对象。
* 5. 若`data`为Document文件,则`Content-Type`为`application/xml;charset=UTF-8`。
* 6. 若以上均不满足,则默认`Content-Type`为`text/plain;charset=UTF-8`。
*/
data?: {
[pname: string]: any;
} | any
/**
* 可选,请求头信息。一般不用指定。
*
* 说明:
* 1. POST请求时,如果接收方想获取到json格式的请求参数,那么可以指定`Content-Type`头信息为
* `application/json`。
*/
headers?: HttpRequestHeaders
}
是否有帮助?
0条评论
评论