Mendix 8.9 did add registerHttpRequestInterceptor so you can intercept REST calls and manipulate the request in Java. You could use this to add your add your custom headers.
In case anyone is interested, the java code below accepts input:
Goal was to be able to give ‘dynamic’ headers to the http request. Like in some cases the requests should give header ‘X-CUSTOMHEADER-SECRET: 123456’ and in other requests (to another host), it should give header ‘X-ANOTHERCUSTOMHEADER-SECRET: 67890’ in the request. In this way I can create the headers dynamicly and am not forced to give each variation its own REST call mendix block.
Uses com.mendix.http ( executeHttpRequest
)
The java action takes the following values as input:
- url (string)
- method (string) – should be any of the constants from com.mendix.http.HttpMethod
- list of header objects
- payload (string)
Output is mendix object System.HttpResponse
import com.mendix.systemwideinterfaces.core.IContext;
import com.mendix.webui.CustomJavaAction;
import com.mendix.systemwideinterfaces.core.IMendixObject;
import com.mendix.http.*;
import java.net.URI;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.mendix.core.Core;
import com.mendix.core.CoreException;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
public Execute_HTTP_Request_Mendix(IContext context, java.lang.String Url, java.lang.String Method, java.util.List<IMendixObject> Headers, java.lang.String Content)
// BEGIN USER CODE
int total_headers = Headers.size();
HttpHeader[] __Headers_java = new HttpHeader[ total_headers ];
if( total_headers > 0 ){
int cntr = 0;
for( system.proxies.HttpHeader __HeadersElement : this.Headers ){
__Headers_java[ cntr ] = new HttpHeader( __HeadersElement.getKey(), __HeadersElement.getValue() );
cntr++;
};
}
URI __Uri_java = new URI( this.Url );
HttpMethod __Method_java = HttpMethod.valueOf( this.Method );
HttpResponse __Response_java = null;
if ( this.Method == "GET" ){
__Response_java = Core.http().executeHttpRequest( __Uri_java, __Method_java, __Headers_java, null );
}
else{ __Response_java = Core.http().executeHttpRequest( __Uri_java, __Method_java, __Headers_java, IOUtils.toInputStream( this.Content ) );
}
system.proxies.HttpResponse __Response = system.proxies.HttpResponse.initialize( getContext(), Core.instantiate( getContext(), "System.HttpResponse" ) );
InputStream is = __Response_java.getContent();
__Response.setContent( IOUtils.toString( is, StandardCharsets.UTF_8 ) );
__Response.setStatusCode( __Response_java.getStatusCode() );
return __Response.getMendixObject();
// END USER CODE