Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,361,227
Community Members
 
Community Events
168
Community Groups

GET Request Always null in ScriptRunner Console

Hello,

I'm trying to test a REST API call with Groovy in the ScriptRunner console but resp is always null. I can get the same content via PowerShell. Anyone know what I'm doing wrong here? 

 

import groovyx.net.http.HTTPBuilder
import net.sf.json.JSONArray
import org.apache.http.HttpRequest;

import org.apache.http.protocol.HttpContext;
import org.apache.http.HttpRequestInterceptor;

def JIRA_API_URL = "https://mydomain.com"

def jira = new HTTPBuilder(JIRA_API_URL);
jira.client.addRequestInterceptor(new HttpRequestInterceptor() {
void process(HttpRequest httpRequest, HttpContext httpContext) {
httpRequest.addHeader('Authorization', 'Basic ' + 'myuser:mypassword'.bytes.encodeBase64().toString())
}
})

def resp = jira.get(path: '/rest/api/2/issue/WO-440', query : [expand:'renderedFields', fields: '"customfield_11101"'])

 

2 answers

0 votes
Nir Haimov Community Leader Feb 12, 2019

Hi @Sir Charles Amante

Why are you using HTTPBuilder?

Here is a complete code that will work for you, just copy paste:

import com.atlassian.jira.component.ComponentAccessor;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.*;
    
def baseUrl = ComponentAccessor.getApplicationProperties().getString("jira.baseurl");  

//rest api request
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(baseUrl + "/rest/api/latest/issue/WO-440?expand=renderedFields&fields=description");
Credentials credentials = new UsernamePasswordCredentials("jira","jira");
client.getParams().setAuthenticationPreemptive(true);
client.getState().setCredentials(AuthScope.ANY, credentials);
client.executeMethod(method);
def response = method.getResponseBodyAsString()
method.releaseConnection();

return response

Thanks Nir! This returns an error about an empty host or something, but I'm not gonna get basic auth working the way I want anyway when traffic's coming in through a load balancer that's enforcing MFA. 

Hi,

Try to found why your request fails. For example:

import groovyx.net.http.HTTPBuilder

def jira = new HTTPBuilder("http://yourjira.com")
jira.auth.basic 'user', 'pass'


jira.handler.failure = { resp ->
    " ${resp.statusLine}"
}

def response = jira.get(path: '/rest/api/2/issue/KEY-123')

This way i get "HTTP/1.1 401".

 

 Your code works for me.

Hi,

Your code works fine on my side, but the only thing you are not controlling are the possible exception thrown, so I would suggest defining handlers for HTTP errors as mention by @Anton Chemlev -_ Toolstrek _-

Please refer to https://github.com/jgritman/httpbuilder/wiki/Response-Handlers for further details.

Regards, 

Thank you both! It's our KEMP load balancer causing a 403. Crud. Looking into oauth. 

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Jira

Online AMA this week: Your project management questions answered by Jira Design Lead James Rotanson

We know that great teams require amazing project management chops. It's no surprise that great teams who use Jira have strong project managers, effective workflows, and secrets that bring planning ...

205 views 1 6
Read article

Atlassian Community Events