Fx.http

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请求
2024-05-16
3 12