title: How to make an API call to a Jenkins server which requires authentication?
body: <p>I am using the following function from <a href="https://wiki.jenkins.io/display/JENKINS/Authenticating+scripted+clients" rel="nofollow noreferrer">https://wiki.jenkins.io/display/JENKINS/Authenticating+scripted+clients</a>.</p>
  
  <pre><code>import java.io.IOException;
  import java.net.URI;
  
  import org.apache.http.HttpHost;
  import org.apache.http.HttpResponse;
  import org.apache.http.auth.AuthScope;
  import org.apache.http.auth.UsernamePasswordCredentials;
  import org.apache.http.client.AuthCache;
  import org.apache.http.client.ClientProtocolException;
  import org.apache.http.client.CredentialsProvider;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.client.protocol.HttpClientContext;
  import org.apache.http.impl.auth.BasicScheme;
  import org.apache.http.impl.client.BasicAuthCache;
  import org.apache.http.impl.client.BasicCredentialsProvider;
  import org.apache.http.impl.client.CloseableHttpClient;
  import org.apache.http.impl.client.HttpClients;
  import org.apache.http.util.EntityUtils;
  
  public class JenkinsScraper {
  
      public String scrape(String urlString, String username, String password) throws ClientProtocolException, IOException {
          URI uri = URI.create(urlString);
          HttpHost host = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
          CredentialsProvider credsProvider = new BasicCredentialsProvider();
          credsProvider.setCredentials(new AuthScope(uri.getHost(), uri.getPort()), new UsernamePasswordCredentials(username, password));
          // Create AuthCache instance
          AuthCache authCache = new BasicAuthCache();
          // Generate BASIC scheme object and add it to the local auth cache
          BasicScheme basicAuth = new BasicScheme();
          authCache.put(host, basicAuth);
          CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
          HttpGet httpGet = new HttpGet(uri);
          // Add AuthCache to the execution context
          HttpClientContext localContext = HttpClientContext.create();
          localContext.setAuthCache(authCache);
  
          HttpResponse response = httpClient.execute(host, httpGet, localContext);
  
          return EntityUtils.toString(response.getEntity());
      }
  
  }
  </code></pre>
  
  <p>In the main function I am calling scrape, I pass the job URL as urlString, username as username and API key as password.</p>
  
  <pre><code>JenkinsScraper jenkinsScraper = new JenkinsScraper();
  System.out.println(jenkinsScraper.scrape("{jenkins_server}/job/{jobname}/api/json", "username", "APIkey"));
  </code></pre>
  
  <p>I receive a response which contains an error page that says your browser does not support JavaScript.</p>
  
  <pre><code>&lt;!-- template name: form.autopost.template.html --&gt;
  
  
  &lt;html&gt;
      &lt;head&gt;
          &lt;title&gt;Submit Form&lt;/title&gt;
          &lt;meta name="referrer" content="origin"/&gt;
          &lt;meta http-equiv="x-ua-compatible" content="IE=edge" /&gt;
      &lt;/head&gt;
      &lt;body onload="javascript:document.forms[0].submit()"&gt;
         &lt;noscript&gt;
              &lt;p&gt;
                  &lt;strong&gt;Note:&lt;/strong&gt; Since your browser does not support JavaScript, you must press the Resume button once to proceed.
              &lt;/p&gt;
          &lt;/noscript&gt;
          &lt;form method="post" action="/SSO.saml2"&gt;
                          &lt;input type="hidden" name="RelayState" value="5mzwkrmdQ3OWkZFOylv0DZPFuBWaak"/&gt;
                          &lt;noscript&gt;&lt;input type="submit" value="Resume"/&gt;&lt;/noscript&gt;
          &lt;/form&gt;
      &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>How can I extract the build results from Jenkins page?</p>