# 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: {
/**请求的url,必须设置 */
url: string;
/**可选,默认为`GET`请求,还可以传递`POST` 、 `PUT` 、`DELETE` */
method?: string;
/**
* 可选,请求参数。
*
* 说明:
*
* 1. 对于`GET`请求,则将参数以json形式放入`data`,此时会自动将参数追加到url上。
* 2. 对于`POST`请求:
* 1. 若指定Content-Type,则会对传入的`data`参数进行核验是否一致,若不一致则抛异常,具体如下:
* 1. 若`Content-Type`为`application/json`,则`data`应该为json格式,且json内不包含文件类
* 型。
* 2. 若`Content-Type`为`multipart/form-data`,则`data`应该为json格式,且json内可以包含文件类
* 型。
* 3. 若`Content-Type`为`application/xml`,则`data`应该为xml字符串或Document文件。
* 4. 若`Content-Type`为`application/octet-stream`,则`data`应该为文件类型。
* 5. 若`Content-Type`为`application/x-www-form-urlencoded`,则`data`可以为字符串或json,且
* 为json格式时,json内不包含文件类型。
* 2. 若未指定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?: HttpHeaders
}): HttpResponseResult;
/**
* 发起一次http请求。
*
* @param url get请求的参数用户自行封装在url中。
*/
export function get(url: string): HttpResponseResult;
/**
* 发起一次post请求。内部会调用request方法。
*
* @param args 请求的参数。
*/
export function post(args: {
/**请求的url,必须设置 */
url: string,
/**
* 可选,请求参数。
*
* 说明:
*
* 1. 若指定Content-Type,则会对传入的`data`参数进行核验是否一致,若不一致则抛异常,具体如下:
* 1. 若`Content-Type`为`application/json`,则`data`应该为json格式,且json内不包含文件类型。
* 2. 若`Content-Type`为`multipart/form-data`,则`data`应该为json格式,且json内可以包含文件类型。
* 3. 若`Content-Type`为`application/xml`,则`data`应该为xml字符串或Document文件。
* 4. 若`Content-Type`为`application/octet-stream`,则`data`应该为文件类型。
* 5. 若`Content-Type`为`application/x-www-form-urlencoded`,则`data`可以为字符串或json,且为
* json格式时,json内不包含文件类型。
* 2. 若未指定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?: HttpHeaders
}): HttpResponseResult;
/**
* 创建一个可以进行会话的http连接,用于连续的对同一个服务器发起多个请求。
*
* @param host 服务器地址,如`http://192.168.7.128:8080`。
* @return
*/
export function openHttpConnection(host: string): 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链接对象,创建一次可多次复用,用于连续多次的向同一个服务器发送请求。
*/
declare interface HttpConnection {
/**
* 发起一个`GET`请求。
*
* @param url url中只需要传递相对地址,如: `/DJXX/main.do`。
* @return
*/
get(url: string): HttpResponseResult;
/**
* 发起一个http请求。
*
* @param args
* @return
*/
request(args: {
/**请求的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?: HttpHeaders
}): HttpResponseResult;
/**
* 获取httpClientBuilder对象,通过这个对象可以设置connectionTimeout等参数。
*
* @return
*/
getHttpClientBuilder(): any;
/**
* 设置最大保持连接时间。
*
* @param time 单位:毫秒。
*/
setKeepAliveStrategyTime(time: number): void;
}
declare interface HttpHeaders {
/**
* 请求的与实体对应的MIME信息。
*
* @example
* "Content-Type":"application/json;charset=UTF-8"
* "Content-Type":"multipart/form-data"
*/
"Content-Type"?: string,
/**请求的内容长度 */
"Content-Length"?: number,
/**包含发出请求的用户信息 */
"User-Agent"?: string,
/**浏览器能够接受的内容消息*/
"Accept"?: string,
/**指定浏览器可以支持的web服务器返回内容压缩编码类型*/
"Accept-Encoding"?: string,
/**浏览器保存服务器返回数据的方法,通常保存用户身份信息*/
"Cookie"?: string,
/**
* 压缩媒体类型。
*
* @example
* "Content-Encoding":"gzip,deflate,compress"
* "Content-Encoding":"gzip"
*/
"Content-Encoding"?: string,
/**
* 浏览器可以接受的字符编码集。
*
* @example
* "Accept-Charset":"iso-8859-1"
* "Accept-Charset":"utf-8"
*/
"Accept-Charset"?: string,
[p: string]: any;
}
0条评论
评论