English
Fx.http
About 2148 wordsAbout 7 min
2026-01-09
1. Execute HTTP requests by constructing Request objects
HTTP requests, supporting application/json, application/octet-stream, application/x-www-form-urlencoded, and multipart/form-data by constructing Request objects.
Fx.http.execute(<Request request>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| request | Request | Request body | Y |
Code examples
// There are 4 ways to construct the request body, choose the appropriate method based on the scenario
// Method 1: application/json body format, standard JSON
Map map = ["a": 1, "b": 2]
StringBody body = StringBody.builder().content(map).build()
// Method 2: multipart/form-data body format, can be used for file transfer
// First download the file's InputStream and call a third-party API to upload to the client system
// def(Boolean err, Object fileData, String msg) = Fx.file.downloadStream("N_202111_29_6eb71dca766944c582b87e6a5213f3a3.docx")
// if (err) {
// log.info("downloadStream error :" + msg)
// Fx.message.throwException("downloadStream error :" + msg)
// }
// InputStream inputStream = fileData['inputStream'] as InputStream
// MultipartBody body = MultipartBody.builder()
// .addPart("name", "tom")
// .addPart("id", "1234")
// .addPart("file", inputStream, 'test_attachment.docx', 'application/octet-stream')
// .build();
// Method 3: Use InputStreamBody for file transfer
//InputStreamBody body = InputStreamBody.builder()
// .content(inputStream)
// .build()
// Method 4: application/x-www-form-urlencoded body format
// 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) {
// You can add request parameter logging
log.error("http request error: "+ error +" errorMessage: " + errorMessage + " result: " + result)
//1. Use error to terminate execution
//Fx.message.throwException("http.get error")
//2. Use return to terminate execution
//return;
//3. Continue execution
} else {
def content = result.content // Encapsulated result from the function, generally use this
def byte[] bytes = result.bytes // Raw binary result data, use this if the above method fails or for non-data information like files
//dosomething
}Reference Interface
Reference guide: HttpResult
Reference guide: Request
Notice
- Supports application/json, application/octet-stream, application/x-www-form-urlencoded, and multipart/form-data.
- The content in HttpResult defaults to String, but will be converted to Object if the response header specifies context-type=application/json.
- Default size limit is 5MB.
1. postSoap Send SOAP request and return response body
Fx.http.postSoap(<SoapRequest request>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| request | SoapRequest | Request body | Y |
Code examples
// Legacy invocation method
// 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)
// }
// The response is also in XML format requiring manual parsing
// Result: <?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>// The new approach eliminates manual Response Body parsing
// New Method 1:
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())
}
// New Method 2:
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())
}
//Result: {CalcPrecoFACResponse={CalcPrecoFACResult={Servicos={cServico={MsgErro=Codigo de servico invalido., Codigo=41106, Erro=-1, Valor=0}}}}}Reference Interface
Reference guide: SoapRequest
Reference guide: HttpResult
Notice
- Default size limit of 5m
- The version field specifies the corresponding value of Content-Type in the header, with a default of text/xml. When version is set to SOAP_1_2, it corresponds to application/soap+xml.
2. get HTTP GET request
HTTP GET Request
Fx.http.get(<String url>, <Map headers>, <Integer timeout>, <Integer retry>, <Integer retryCount>, <Boolean ignoreSSL>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| url | String | Request URL | Y |
| headers | Map | Optional parameter, request headers | Y |
| timeout | Integer | Optional parameter, socketTimeOut duration in milliseconds (max 120,000ms where 1s=1000ms) | -- |
| retry | Integer | [Deprecated] Optional parameter, whether to retry on socketTimeOut. Connection timeout always triggers retry. This parameter determines timeout retry behavior. Setting true may cause duplicate submissions | -- |
| retryCount | Integer | [Deprecated] Optional parameter, maximum retry attempts (up to 3 times) | -- |
| ignoreSSL | Boolean | Optional parameter, bypass SSL verification | -- |
Code examples
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) {
//Option to print request parameters
log.error("HTTP request error: "+ error +" errorMessage: " + errorMessage + " result: " + result)
//1. Terminate execution by throwing exception
//Fx.message.throwException("http.get error")
//2. Terminate execution using return
//return;
//3. Continue execution
} else {
def content = result.content //Encapsulated function result, generally use this
def byte[] bytes = result.bytes //Raw binary result data, use this if the above method fails or for non-data information like files
//Do something
}Reference Interface
- Reference guide: HttpResult
Notice
- Default size limit is 5MB;
- It is recommended to use execute as an alternative to this method;
- Retry has been deprecated and is no longer supported;
3. post HTTP POST request
HTTP POST Request
Fx.http.post(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Integer retry>, <Integer retryCount>, <Boolean ignoreSSL>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| url | String | Request URL | Y |
| headers | Map | Optional parameter, request headers | Y |
| data | Map | Request body | -- |
| timeout | Integer | Optional parameter, socket timeout duration in milliseconds (max 120000ms, 1s=1000ms) | -- |
| retry | Integer | Optional parameter, whether to retry on socket timeout (connection timeout always retries); when set to true may cause duplicate submissions -- DEPRECATED | -- |
| retryCount | Integer | Optional parameter, maximum retry count (up to 3 times) -- DEPRECATED | -- |
| ignoreSSL | Boolean | Optional parameter, bypass SSL verification | -- |
Code examples
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) {
//Optionally log request parameters
log.error("HTTP request error: " + error + " errorMessage: " + errorMessage + " result: " + result)
//1. Terminate execution with error
//Fx.message.throwException("http.get error")
//2. Terminate execution with return
//return;
//3. Continue execution
} else {
def content = result.content //Encapsulated function result (recommended for most cases)
def byte[] bytes = result.bytes //Raw binary result data (use when encountering issues with content parsing or handling non-data information like files)
//Perform operations
}Reference Interface
- Reference guide: HttpResult
Notice
- Default 5MB size limit
4. options HTTP OPTIONS request
HTTP OPTIONS Request
Fx.http.options(<String url>, <Map headers>, <Integer timeout>, <Integer retry>, <Integer retryCount>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| url | String | Request URL | Y |
| headers | Map | Optional parameter, request headers | Y |
| timeout | Integer | Optional parameter, socket timeout duration in milliseconds (max 120000ms where 1s=1000ms) | -- |
| retry | Integer | Optional parameter, whether to retry on socket timeout (connection timeout always retries). Note: Setting true may cause duplicate submissions -- DEPRECATED | -- |
| retryCount | Integer | Optional parameter, maximum retry count (up to 3 times) -- DEPRECATED | -- |
Code examples
def (Boolean error, HttpResult result, String errorMessage) = Fx.http.options("http://www.fxiaoke.com", ["X-token":"myToken"], 2000, true, 2)
if (error || result.statusCode != 200) {
//Option to print request parameters
log.error("http request error: "+ error +" errorMessage: " + errorMessage + " result: " + result)
//1. Terminate execution with error
//Fx.message.throwException("http.get error")
//2. Terminate execution using return
//return;
//3. Continue execution
} else {
def content = result.content //Encapsulated function result (recommended for most cases)
def byte[] bytes = result.bytes //Raw binary result data (use when encountering issues with the above method or for non-data information like files)
//Perform operations
}Reference Interface
- Reference guide: HttpResult
Notice
- Default 5MB size limit
5. put HTTP PUT request
HTTP PUT Request
Fx.http.put(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Integer retry>, <Integer retryCount>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| url | String | Request URL | Y |
| headers | Map | Optional parameter, request headers | Y |
| data | Map | Request body | -- |
| timeout | Integer | Optional parameter, socket timeout duration in milliseconds (max 120s, where 1s = 1000ms) | -- |
| retry | Integer | Optional parameter, whether to retry on socket timeout (connection timeout always retries; this parameter determines timeout retry behavior). Setting true may cause duplicate submissions -- DEPRECATED | -- |
| retryCount | Integer | Optional parameter, maximum retry count (up to 3 times) -- DEPRECATED | -- |
Code examples
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) {
//Optionally log request parameters
log.error("http request error: "+ error +" errorMessage: " + errorMessage + " result: " + result)
//1. Terminate execution by throwing exception
//Fx.message.throwException("http.get error")
//2. Terminate execution using return
//return;
//3. Continue execution
} else {
def content = result.content //Encapsulated function result (recommended for most cases)
def byte[] bytes = result.bytes //Raw binary result data (use when content retrieval fails or for non-data responses like files)
//Perform operations
}Reference Interface
- Reference guide: HttpResult
Notice
- Default 5MB size limit
6. delete HTTP DELETE request
HTTP DELETE Request
Fx.http.delete(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Integer retry>, <Integer retryCount>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| url | String | Request URL | Y |
| headers | Map | Optional parameter, request headers | Y |
| data | Map | Request body | -- |
| timeout | Integer | Optional parameter, socket timeout duration in milliseconds (max 120000ms where 1s=1000ms) | -- |
| retry | Integer | Optional parameter (deprecated), determines whether to retry on timeout. Connection timeout always triggers retry. Setting true may cause duplicate submissions | -- |
| retryCount | Integer | Optional parameter (deprecated), maximum retry count (up to 3 times) | -- |
Code examples
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) {
//Optionally print request parameters
log.error("http request error: "+ error +" errorMessage: " + errorMessage + " result: " + result)
//1. Terminate execution by throwing exception
//Fx.message.throwException("http.get error")
//2. Terminate execution using return
//return;
//3. Continue execution
} else {
def content = result.content //Encapsulated function result, generally use this
def byte[] bytes = result.bytes //Raw binary result data, use this if the above method fails or for non-data information like files
//dosomething
}Reference Interface
- Reference guide: HttpResult
Notice
- Default 5MB size limit
7. patch HTTP PATCH request
HTTP PATCH Request
Fx.http.patch(<String url>, <Map headers>, <Map data>, <Integer timeout>, <Integer retry>, <Integer retryCount>)
Request parameters
Request Body
| Parameter Name | Type | Description | Required |
|---|---|---|---|
| url | String | Request URL | Y |
| headers | Map | Optional parameter, request headers | Y |
| data | Map | Request body | -- |
| timeout | Integer | Optional parameter, socket timeout duration in milliseconds (max 120s, where 1s = 1000ms) | -- |
| retry | Integer | Optional parameter, whether to retry on socket timeout (connection timeout always retries; this parameter determines timeout retry behavior). Note: Setting true may cause duplicate submissions -- DEPRECATED | -- |
| retryCount | Integer | Optional parameter, retry count (max 3 attempts) -- DEPRECATED | -- |
Code examples
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) {
//Option to print request parameters
log.error("http request error: "+ error +" errorMessage: " + errorMessage + " result: " + result)
//1.Terminate execution by throwing exception
//Fx.message.throwException("http.get error")
//2.Terminate execution using return
//return;
//3.Continue execution
} else {
def content = result.content //Encapsulated function result, typically use this
def byte[] bytes = result.bytes //Raw binary result data, use this if encountering issues with the above method or when handling non-data information like files
//Perform operations
}Reference Interface
- Reference guide: HttpResult
Notice
- Default 5MB size limit
Reference object com.fxiaoke.functions.http.HttpResult
Field description
| Parameter Name | object | |
|---|---|---|
| headers | java.util.Map | HTTP response headers |
| bytes | byte[] | Raw binary data of HTTP request |
| content | java.lang.Object | Payload content of HTTP response |
| statusCode | int | HTTP response status code |
Reference object com.fxiaoke.functions.http.Request
Field description
| Parameter Name | object | Description |
|---|---|---|
| headers | java.util.Map<java.lang.String,java.util.List<java.lang.String>> | Request headers |
| method | java.lang.String | HTTP method (POST/GET/PUT...) |
| retryCount | java.lang.Integer | Retry count (0 means no retry, maximum 3 retries) |
| insecure | java.lang.Boolean | Whether to bypass SSL verification (default: false) |
| body | com.fxiaoke.functions.http.RequestBody | Request body |
| timeout | java.lang.Integer | Timeout duration (maximum 120 seconds) |
| url | java.lang.String | Request URL |
Reference object com.fxiaoke.functions.http.SoapRequest
Field description
| Parameter Name | object | Description |
|---|---|---|
| headers | java.util.Map<java.lang.String,java.util.List<java.lang.String>> | Request headers |
| prefix | java.lang.String | Prefix |
| retryCount | java.lang.Integer | Retry count (0 means no retry, maximum 3 retries, default is no retry) |
| localPart | java.lang.String | The localPart for sending messages |
| bodyParams | java.util.Map<java.lang.String,java.lang.Object> | Parameter list, which can be nested hierarchically |
| namespace | java.lang.String | Namespace for sending messages |
| version | java.lang.String | Version (current values: SOAP_1_1 for version 1.1, SOAP_1_2 for version 1.2, default is 1.1) |
| fromXml | java.lang.String | Direct request via XML |
| timeout | java.lang.Integer | Timeout duration (default 15 seconds, maximum 120s) |
| url | java.lang.String | Request URL address |
