Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

HttpClientRequest encoding setting

Samy_doe
Level 1
Level 1

Hello,

 

We are doing a JS where a HttpClientRequest is used for pushing a request to another 3rd party REST API. In this request we are setting the header Content-type to application/json with charset=utf-8. However, the 3rd party that is receiving the request is not receiving it with UTF-8 encoding but in another encoding (windows-1252). Question: is there another setting other than the HttpClientRequest header that might change the encoding of a request done from ACC to another API?

Adobe Campaign Classic
1 Accepted Solution
Samy_doe
Correct answer by
Level 1
Level 1

The way you can use HttpClientRequest is in a JS activity in a workflow and it looks like:

var request = new HttpClientRequest(url);
request.connect();
request.method = "POST";
request.body = data;
request.header["Content-Type"] = "application/json;charset=UTF-8";
request.execute();

In this request the connect() and execute() methods have some optional parameters for when the endpoint has a proxy or if you want to have a call async. Documentation here: https://docs.adobe.com/content/help/en/campaign-classic/technicalresources/api/c-HttpClientRequest.h... 

However, it seems like the way the connect and execute methods are setup up is interfering with the Content-Type header meaning that in some configuration the Content-Type set up like in the above code is ignored.
This seems to be related to the proxy setting on the ACC environment we are working in. We managed to find a working code by not setting up any optional parameters but only using connect() and execute() as they are.

View solution in original post

3 Replies
wodnicki
Community Advisor
Community Advisor

Hi,

 

I've never been able to get HTTPClientRequest to set content-type header.

What I've done to solve is make a drop-in replacement for HTTPClientRequest class, wrapping execCommand('curl').

HTTPClientRequest is libcurl anyway.

 

Thanks,

-Jon

Samy_doe
Level 1
Level 1

The way you can use HttpClientRequest is in a JS activity in a workflow and it looks like:

var request = new HttpClientRequest(url);
request.connect();
request.method = "POST";
request.body = data;
request.header["Content-Type"] = "application/json;charset=UTF-8";
request.execute();

In this request the connect() and execute() methods have some optional parameters for when the endpoint has a proxy or if you want to have a call async. Documentation here: https://docs.adobe.com/content/help/en/campaign-classic/technicalresources/api/c-HttpClientRequest.h... 

However, it seems like the way the connect and execute methods are setup up is interfering with the Content-Type header meaning that in some configuration the Content-Type set up like in the above code is ignored.
This seems to be related to the proxy setting on the ACC environment we are working in. We managed to find a working code by not setting up any optional parameters but only using connect() and execute() as they are.

Samy_doe
Correct answer by
Level 1
Level 1

The way you can use HttpClientRequest is in a JS activity in a workflow and it looks like:

var request = new HttpClientRequest(url);
request.connect();
request.method = "POST";
request.body = data;
request.header["Content-Type"] = "application/json;charset=UTF-8";
request.execute();

In this request the connect() and execute() methods have some optional parameters for when the endpoint has a proxy or if you want to have a call async. Documentation here: https://docs.adobe.com/content/help/en/campaign-classic/technicalresources/api/c-HttpClientRequest.h... 

However, it seems like the way the connect and execute methods are setup up is interfering with the Content-Type header meaning that in some configuration the Content-Type set up like in the above code is ignored.
This seems to be related to the proxy setting on the ACC environment we are working in. We managed to find a working code by not setting up any optional parameters but only using connect() and execute() as they are.

View solution in original post