Fx.http:和http请求相关的API
1. execute HTTP请求,通过构造Request请求,支持application/json,application/x-www-form-urlencoded和multipart/form-data
Fx.http.execute(<Request request>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
request | Request |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Groovy举例
// 下载文件的InputStream调用第三方接口上传到客户系统
def(Boolean err, Object fileData, String msg) = Fx.file.downloadStream("N_202111_29_6eb71dca766944c582b87e6a5213f3a3.docx")
if (err) {
log.info("downloadStream error :" + msg)
} else {
log.info("file data :" + fileData)
}
InputStream inputStream = fileData['inputStream'] as InputStream
//1、 multipart/form-data 的body请求格式,可以用来传输文件
MultipartBody body = MultipartBody.builder()
.addPart("name", "tom")
.addPart("id", "1234")
.addPart("file", inputStream, '测试附件.docx', 'application/octet-stream')
.build();
//2、或者使用InputStreamBody传输文件
//InputStreamBody body = InputStreamBody.builder()
// .content(inputStream)
// .build()
//3、application/json 的body请求格式
// Map map = ["a": 1, "b": 2]
// StringBody body = StringBody.builder().content(map).build()
//4、 application/x-www-form-urlencoded 的body请求格式
// FormBody body = FormBody.builder()
// .field("a", "qweasd")
// .field("b", 12423)
// .field("c", "hello")
// .build()
Request request = Request.builder()
.method("POST")
.url('http://httpbin.org/post')
.timeout(7000)
.retryCount(0)
.header("Content-Type", "multipart/form-data")
.body(body)
.build()
def(Boolean error, HttpResult result, String message) = Fx.http.execute(request)
if (error || result.statusCode != 200) {
log.info("error :" + message)
} else {
log.info(result)
}
(1).参考Request
(2).参考HttpResult
注意事项
- HttpResult中的content默认是String,但如果response header中context-type=application/json会转成Object,默认5m大小限制
2. get HTTP GET请求
Fx.http.get(<String url>, <Map headers>, <Integer timeout>, <Boolean retry>, <Integer retryCount>, <Boolean ignoreSSL>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url |
headers | Map | 可选参数,请求header |
timeout | Integer | 可选参数,scoketTimeOut超时时间,单位ms,最大120s ,1s=1000ms |
retry | Boolean | 可选参数,scoketTimeOut超时是否重试;连接超时一定会进行重试,这个参数决定了timeout是否重试;设置为true时,可能会造成重复提交 |
retryCount | Integer | 可选参数,重试次数,最多3次 |
ignoreSSL | Boolean | 可选参数,绕过SSl验证 |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Java举例
Map<String, Object>header = Maps.newHashMap();
header.put("X-token", "myToken");
APIResult ret = Fx.http.get("http://www.fxiaoke.com", header, 2000, true, 2, false);
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
Groovy举例
def (Boolean error,HttpResult result, String errorMessage) = Fx.http.get("http://www.fxiaoke.com", ["X-token":"myToken"], 2000, true, 2, false)
if (error || result.statusCode != 200) {
log.info("error :" + errorMessage)
} else {
log.info(result)
}
(1).参考HttpResult
注意事项
- 默认5m大小限制
3. post HTTP POST请求
Fx.http.post(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Boolean retry>, <Integer retryCount>, <Boolean ignoreSSL>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url |
headers | Map | 请求header |
data | Map | 请求体 |
timeout | Integer | 可选参数,scoketTimeOut超时时间,单位ms,最大120s ,1s=1000ms |
retry | Boolean | 可选参数,scoketTimeOut超时是否重试;连接超时一定会进行重试,这个参数决定了timeout是否重试;设置为true时,可能会造成重复提交 |
retryCount | Integer | 可选参数,重试次数,最多3次 |
ignoreSSL | Boolean | 可选参数,绕过SSl验证 |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Java举例
Map<String, Object>header = Maps.newHashMap();
header.put("X-token", "myToken");
Map<String, Object>data = Maps.newHashMap();
data.put("id", 1);
APIResult ret = Fx.http.post("http://www.fxiaoke.com", header, data, 2000, true, 2, false);
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
Groovy举例
def (Boolean error,HttpResult result,String errorMessage) = Fx.http.post("http://www.fxiaoke.com", ["X-token":"myToken"], ["id":1], 2000, true, 2, false)
if (error || result.statusCode != 200) {
log.info("error :" + errorMessage)
} else {
log.info(result)
}
(1).参考HttpResult
注意事项
- 默认5m大小限制
4. options HTTP OPTIONS请求
Fx.http.options(<String url>, <Map headers>, <Integer timeout>, <Boolean retry>, <Integer retryCount>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url |
headers | Map | 请求header |
timeout | Integer | 可选参数,scoketTimeOut超时时间,单位ms,最大120s ,1s=1000ms |
retry | Boolean | 可选参数,scoketTimeOut超时是否重试;连接超时一定会进行重试,这个参数决定了timeout是否重试;设置为true时,可能会造成重复提交 |
retryCount | Integer | 可选参数,重试次数,最多3次 |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Java举例
Map<String, Object>header = Maps.newHashMap();
header.put("X-token", "myToken");
APIResult ret = Fx.http.options("http://www.fxiaoke.com", header,2000, true, 2);
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
Groovy举例
def (Boolean error, HttpResult result, String errorMessage) = Fx.http.options("http://www.fxiaoke.com", ["X-token":"myToken"], 2000, true, 2)
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
(1).参考HttpResult
注意事项
- 默认5m大小限制
5. put HTTP PUT请求
Fx.http.put(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Boolean retry>, <Integer retryCount>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url |
headers | Map | 请求header |
data | Map | 请求体 |
timeout | Integer | 可选参数,scoketTimeOut超时时间,单位ms,最大120s ,1s=1000ms |
retry | Boolean | 可选参数,scoketTimeOut超时是否重试;连接超时一定会进行重试,这个参数决定了timeout是否重试;设置为true时,可能会造成重复提交 |
retryCount | Integer | 可选参数,重试次数,最多3次 |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Java举例
Map<String, Object>header = Maps.newHashMap();
header.put("X-token", "myToken");
Map<String, Object>data = Maps.newHashMap();
data.put("id", 1);
APIResult ret = Fx.http.put("http://www.fxiaoke.com", header, data, 2000, true, 2);
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
Groovy举例
def (Boolean error, HttpResult result, String errorMessage) = Fx.http.put("http://www.fxiaoke.com", ["X-token":"myToken"], ["id":1], 2000, true, 2)
if (error || result.statusCode != 200) {
log.info("error :" + errorMessage)
} else {
log.info(result)
}
(1).参考HttpResult
注意事项
- 默认5m大小限制
6. delete HTTP DELETE请求
Fx.http.delete(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Boolean retry>, <Integer retryCount>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url |
headers | Map | 请求header |
data | Map | 请求体 |
timeout | Integer | 可选参数,scoketTimeOut超时时间,单位ms,最大120s ,1s=1000ms |
retry | Boolean | 可选参数,scoketTimeOut超时是否重试;连接超时一定会进行重试,这个参数决定了timeout是否重试;设置为true时,可能会造成重复提交 |
retryCount | Integer | 可选参数,重试次数,最多3次 |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Java举例
Map<String, Object>header = Maps.newHashMap();
header.put("X-token", "myToken");
Map<String, Object>data = Maps.newHashMap();
data.put("id", 1);
APIResult ret = Fx.http.delete("http://www.fxiaoke.com", header, data, 2000, true, 2);
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
Groovy举例
def (Boolean error, HttpResult result, String errorMessage) = Fx.http.delete("http://www.fxiaoke.com", ["X-token":"myToken"], ["id":1], 2000, true, 2)
if (error || result.statusCode != 200) {
log.info("error :" + errorMessage)
} else {
log.info(result)
}
(1).参考HttpResult
注意事项
- 默认5m大小限制
7. patch HTTP PATCH请求
Fx.http.patch(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Boolean retry>, <Integer retryCount>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url |
headers | Map | 请求header |
data | Map | 请求体 |
timeout | Integer | 可选参数,scoketTimeOut超时时间,单位ms,最大120s ,1s=1000ms |
retry | Boolean | 可选参数,scoketTimeOut超时是否重试;连接超时一定会进行重试,这个参数决定了timeout是否重试;设置为true时,可能会造成重复提交 |
retryCount | Integer | 可选参数,重试次数,最多3次 |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Java举例
Map<String, Object>header = Maps.newHashMap();
header.put("X-token", "myToken");
Map<String, Object>data = Maps.newHashMap();
data.put("id", 1);
APIResult ret = Fx.http.patch("http://www.fxiaoke.com", header, data, 2000, true, 2);
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
Groovy举例
def (Boolean error, HttpResult result, String errorMessage) = Fx.http.patch("http://www.fxiaoke.com", ["X-token":"myToken"], ["id":1], 2000, true, 2)
if (error || result.statusCode != 200) {
log.info("error :" + errorMessage)
} else {
log.info(result)
}
(1).参考HttpResult
注意事项
- 默认5m大小限制
8. postSoap soap请求发送, 返回参数体
Fx.http.postSoap(<SoapRequest request>)
参数说明
参数 | 类型 | 说明 |
---|---|---|
request | SoapRequest | 请求的参数 |
返回值类型
APIResult
返回值说明
返回的数据类型: HttpResult
Java举例
Map<String, Object>data = Maps.newHashMap();
data.put("nCdServico", "41106");
data.put("nVlPeso", "10");
data.put("strDataCalculo", "22/11/2018");
SoapRequest request = SoapRequest.builder()
.url("http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?wsdl")
.namespace("http://tempuri.org/")
.localPart( "CalcPrecoFAC")
.bodyParams(map)
.build();
APIResult ret = Fx.http.postSoap(request);
HttpResult result = (HttpResult) ret.getData();
if (ret.isError() || result.getStatusCode() != 200) {
log.info(ret.message());
} else {
log.info(ret.getData());
}
Groovy举例
// 旧方式的调用方法
// String content = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/"><soap:Header/><soap:Body><tem:CalcPrecoFAC><tem:nCdServico>41106</tem:nCdServico><tem:nVlPeso>10</tem:nVlPeso><tem:strDataCalculo>22/11/2018</tem:strDataCalculo></tem:CalcPrecoFAC></soap:Body></soap:Envelope>'
// String url = 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?wsdl'
// def(Boolean error, HttpResult result, String message) = Fx.http.post(url, ["Content-Type": "application/soap+xml"], content)
// if (error) {
// log.info("error :" + message)
// } else {
// log.info(result)
// }
// 返回结果是个也是个xml需要自己解析内容
// 结果:<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CalcPrecoFACResponse xmlns="http://tempuri.org/"><CalcPrecoFACResult><Servicos><cServico><Codigo>41106</Codigo><Valor>0</Valor><Erro>-1</Erro><MsgErro>Codigo de servico invalido.</MsgErro></cServico></Servicos></CalcPrecoFACResult></CalcPrecoFACResponse></soap:Body></soap:Envelope>// 新的方式不需要自己解析Repsone Body
// 新方式一:
Map map = [
"nCdServico":"41106",
"nVlPeso":"10",
"strDataCalculo":"22/11/2018"
]
SoapRequest request = SoapRequest.builder()
.url("http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?wsdl")
.namespace("http://tempuri.org/")
.localPart("CalcPrecoFAC")
.prefix("tem")
.bodyParams(map)
.build();
def(Boolean error, HttpResult result, String message) = Fx.http.postSoap(request)
if (error || result.statusCode != 200) {
log.info("error :" + result)
} else {
log.info(result.getContent())
}
// 新方式二:
String xml = '''<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:tem="http://tempuri.org/"><soap:Header/><soap:Body><tem:CalcPrecoFAC><tem:nCdServico>41106</tem:nCdServico><tem:nVlPeso>10</tem:nVlPeso><tem:strDataCalculo>22/11/2018</tem:strDataCalculo></tem:CalcPrecoFAC></soap:Body></soap:Envelope>'''
SoapRequest request = SoapRequest.builder()
.url("http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?wsdl")
.fromXml(xml)
.build();
def(Boolean error, HttpResult result, String message) = Fx.http.postSoap(request)
if (error || result.statusCode != 200) {
log.info("error :" + result)
} else {
log.info(result.getContent())
}
//结果: {CalcPrecoFACResponse={CalcPrecoFACResult={Servicos={cServico={MsgErro=Codigo de servico invalido., Codigo=41106, Erro=-1, Valor=0}}}}}
(1).参考SoapRequest
注意事项
- 默认5m大小限制
参考类 com.fxiaoke.functions.http.Request
字段说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url地址 |
method | String | 请求的方法POST/GET/PUT... |
headers | Map | 请求的header |
body | RequestBody | 请求的body |
timeout | Integer | 超时时间,最大120s |
insecure | Boolean | 是否绕过SSl验证,默认为false,不绕过SSL |
retryCount | Integer | 重试次数,0表示不重试,最大3次重试 |
参考类 com.fxiaoke.functions.http.HttpResult
字段说明
参数 | 类型 | 说明 |
---|---|---|
statusCode | int | HTTP响应状态码 |
content | Object | HTTP响应的Payload内容 |
bytes | byte[] | HTTP请求原始二进制数据 |
headers | Map | HTTP响应的header内容 |
参考类 com.fxiaoke.functions.http.SoapRequest
字段说明
参数 | 类型 | 说明 |
---|---|---|
url | String | 请求的url地址 |
namespace | String | 发送消息的命名空间 |
localPart | String | 发送消息的localPart |
bodyParams | Map | 参数列表,可以层级包含 |
headers | Map | 请求头 |
timeout | Integer | 超时时间, 默认15秒,最大120s |
retryCount | Integer | 重试次数,0表示不重试,最大3次重试,默认为不重试 |
prefix | String | 前缀 |
version | String | version,现有1.1版本值为 SOAP_1_1 1.2版本值为 SOAP_1_2 默认为1.1 |
fromXml | String | 直接通过xml请求 |