import ballerina/io;
import ballerina/http;
import ballerina/mime;
endpoint http:Client clientEndpoint {
    targets: [{
                  url: "https://postman-echo.com"
              }]
    };function main (string[] args) {    http:Request req = new;
    var response = clientEndpoint -> get("/get?test=123", req);
    match response {
        http:Response resp => {
            io:println("GET request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }
    req.setStringPayload("POST: Hello World");
    response = clientEndpoint -> post("/post", req);
    match response {
        http:Response resp => {
            io:println("\nPOST request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}    }
    json jsonMsg = {method:"PUT", payload:"Hello World"};
    req.setJsonPayload(jsonMsg);
    response = clientEndpoint -> put("/put", req);
    match response {
        http:Response resp => {
            io:println("\nPUT request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }
    xml xmlMsg = xml `<request><method>PATCH</method><payload>Hello World!</payload></request>`;
    req.setXmlPayload(xmlMsg);
    json j = {};
    req.setJsonPayload(j);
    response = clientEndpoint -> patch("/patch", req);
    match response {
        http:Response resp => {
            io:println("\nPATCH request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }    req.setStringPayload("DELETE: Hello World");
    response = clientEndpoint -> delete("/delete", req);
    match response {
        http:Response resp => {
            io:println("\nDELETE request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}    }    req.setStringPayload("CUSTOM: Hello World");
    response = clientEndpoint -> execute("COPY", "/get", req);    req = new;
    req.addHeader("Sample-Name", "http-client-connector");
    response = clientEndpoint -> get("/get", req);
    match response {
        http:Response resp => {
            string contentType = resp.getHeader("Content-Type");
            io:println("\nContent-Type: " + contentType);            int statusCode = resp.statusCode;
            io:println("Status code: " + statusCode);        }
        http:HttpConnectorError err =>{io:println(err.message);}    }
}

HTTP Client Connector

The HTTP Client Connector can be used to connect to and interact with an HTTP server.

import ballerina/io;
import ballerina/http;
import ballerina/mime;
endpoint http:Client clientEndpoint {
    targets: [{
                  url: "https://postman-echo.com"
              }]
    };
function main (string[] args) {
    http:Request req = new;
    var response = clientEndpoint -> get("/get?test=123", req);
    match response {
        http:Response resp => {
            io:println("GET request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }

Send a GET request to the specified endpoint

    req.setStringPayload("POST: Hello World");
    response = clientEndpoint -> post("/post", req);
    match response {
        http:Response resp => {
            io:println("\nPOST request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}

Set a string payload to the message to be sent to the endpoint.

    }
    json jsonMsg = {method:"PUT", payload:"Hello World"};
    req.setJsonPayload(jsonMsg);
    response = clientEndpoint -> put("/put", req);
    match response {
        http:Response resp => {
            io:println("\nPUT request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }

Set a JSON payload to the message to be sent to the endpoint.

    xml xmlMsg = xml `<request><method>PATCH</method><payload>Hello World!</payload></request>`;
    req.setXmlPayload(xmlMsg);
    json j = {};

Set an XML payload to the message to be sent to the endpoint.

    req.setJsonPayload(j);
    response = clientEndpoint -> patch("/patch", req);
    match response {
        http:Response resp => {
            io:println("\nPATCH request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }

Remove the json payload.

    req.setStringPayload("DELETE: Hello World");
    response = clientEndpoint -> delete("/delete", req);
    match response {
        http:Response resp => {
            io:println("\nDELETE request:");
            var msg = resp.getJsonPayload();
            match msg {
                json jsonPayload => {
                    io:println(jsonPayload);
                }
                http:PayloadError payloadError => {
                    io:println(payloadError.message);
                }
            }
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }
    req.setStringPayload("CUSTOM: Hello World");
    response = clientEndpoint -> execute("COPY", "/get", req);

The execute() action can be used if one needs to use custom HTTP verbs.

    req = new;
    req.addHeader("Sample-Name", "http-client-connector");
    response = clientEndpoint -> get("/get", req);
    match response {
        http:Response resp => {
            string contentType = resp.getHeader("Content-Type");
            io:println("\nContent-Type: " + contentType);
            int statusCode = resp.statusCode;
            io:println("Status code: " + statusCode);
        }
        http:HttpConnectorError err =>{io:println(err.message);}
    }
}
$ ballerina run http-client-connector.bal
GET request:
{"args":{"test":"123"},"headers":{"host":"postman-echo.com","user-agent":"ballerina/0.92.1-SNAPSHOT","x-forwarded-port":"443","x-forwarded-proto":"https"},"url":"https://postman-echo.com/get?test=123"}
POST request:
{"args":{},"data":"POST: Hello World","files":{},"form":{},"headers":{"host":"postman-echo.com","content-length":"17","content-type":"text/plain","user-agent":"ballerina/0.92.1-SNAPSHOT","x-forwarded-port":"443","x-forwarded-proto":"https"},"json":null,"url":"https://postman-echo.com/post"}
PUT request:
{"args":{},"data":{"method":"PUT","payload":"Hello World"},"files":{},"form":{},"headers":{"host":"postman-echo.com","content-length":"40","content-type":"application/json","user-agent":"ballerina/0.92.1-SNAPSHOT","x-forwarded-port":"443","x-forwarded-proto":"https"},"json":{"method":"PUT","payload":"Hello World"},"url":"https://postman-echo.com/put"}
PATCH request:
{"args":{},"data":"<request><method>PATCH</method><payload>Hello World!</payload></request>","files":{},"form":{},"headers":{"host":"postman-echo.com","content-length":"72","content-type":"application/xml","user-agent":"ballerina/0.92.1-SNAPSHOT","x-forwarded-port":"443","x-forwarded-proto":"https"},"json":null,"url":"https://postman-echo.com/patch"}
DELETE request:
{"args":{},"data":"DELETE: Hello World","files":{},"form":{},"headers":{"host":"postman-echo.com","content-length":"19","content-type":"text/plain","user-agent":"ballerina/0.92.1-SNAPSHOT","x-forwarded-port":"443","x-forwarded-proto":"https"},"json":null,"url":"https://postman-echo.com/delete"}
Content-Type: application/json; charset=utf-8
Status code: 200