---
title: "Generic HTTP request"
canonical: "https://support.appfire.com/space/PSJ/804327145/Generic%20HTTP%20request"
format: markdown
---
> Macro (aura-html)

> Macro (button-handy)



> Macro (excerpt)
> 
> A function that combines multiple HTTP request functions into a single reusable function that can be used with any request.

This function is best used as a include file so it can be reused across multiple SIL script files. The _httpResult struct is used to return all the info/data needed about the call including, if the call was successful or if it failed, what the failure message is, and any data returned from the call.

> ℹ️ Note: This script stores the username and passwords being called by this function in a global variable so that this sensitive data is not stored in the script. For more information about these global variables call Persistent Variables see [this page](https://appfire.atlassian.net/wiki/spaces/PSJ/pages/15487662).

```
struct _httpResult {
    boolean success;
    string message;
    string data;
}

string serverUser = getPersistentVar("serverUser");
string serverPass = getPersistentVar("serverPass");

string cloudUser= getPersistentVar("cloudUser");
string cloudPass = getPersistentVar("cloudApiToken");

string authString = "Basic " + base64Encode(cloudUser + ":" + cloudPass);

function generateRequest(string type) {
    HttpRequest request;
    HttpHeader header = httpCreateHeader("Content-Type", "application/json");
    request.headers += header;
    
    if(type == "SERVER") {
        HttpHeader authHeader = httpBasicAuthHeader(serverUser, serverPass);
        request.headers += authHeader;
    } else {
        HttpHeader header2 = httpCreateHeader("Authorization", authString);
        request.headers += header2;
    }
    return request;
}

function genericRestCall(string url, string method, string data, HttpRequest request) {
    
    _httpResult result;
    
    if(method == "GET") {
        result.data = httpGet(url, request);
    } else if (method == "PUT") {
        result.data = httpPut(url, request, data);
    } else if (method == "DELETE") {
        result.data = httpDelete(url, request, data);
    } else if (method == "PATCH") {
        result.data = httpPatch(url, request, data);
    } else {
        result.data = httpPost(url, request, data);
    }
    
    number statusCode = httpGetStatusCode();
    if (statusCode >= 200 && statusCode < 300) {
        result.success = true;
    }
    else {
        string msg = "URL: " + url + " <br /> {" + trim(statusCode) + " : " + httpGetErrorMessage() + " : " + httpGetReasonPhrase() + "}";
        result.success = false;
        result.message = msg;
    }
    return result;
}
```

## Example Use

```
include "Includes/genericRest.incl";

_httpResult result = genericRestCall(jiraUrl+"/rest/api/3/issue/"+key+"/properties", "GET", "", generateRequest("CLOUD"));

if(result.success == true) {
    myCustomStruct = fromJson(result.data);
    //do something with the returned data
} else {
    runnerLog(data.message);
    //call failed, initiate self destruct sequence
}
```