SSJS : SFMC의 Script.Util.HttpRequest 개체에서 응답 헤더 읽기

Nov 02 2020

Script.Util.HttpRequest 함수를 사용하여 SSJS에서 실행 된 HTTP GET 호출에서 응답 헤더를 검색해야합니다.

안타깝게도 간단 해 보이고 작업 자체가 매우 사소한 일이지만 우리는이 문제를 해결할 수 없습니다.

우리는 이미에 (큰) Gortonington하여 답을 읽어 이 매우 최근의 스레드 만이 되거 이벤트하지만, 그것은 우리의 문제가 해결되지 않습니다.

헤더가 CLR 개체로 반환된다는 것을 이해하지만 분명히 뭔가 잘못하고 있습니다.

아래는 우리가 달성하고자하는 것을 명확히하는 코드 스 니펫입니다.

<script runat="server" type="text/javascript">
  Platform.Load("core","1");
  var endpoint = "www.google.com";
  var req = new Script.Util.HttpRequest(endpoint);
  req.emptyContentHandling = 0;
  req.retries = 2;
  req.continueOnError = true;
  req.method = "GET";
  req.setHeader("Cache-Control","no-cache");
  var resp = req.send();
  try {
    Platform.Response.Write("Return header Stringify: " + Stringify(resp.headers) + "<br />");
    Platform.Response.Write("Return header: " + resp.headers["server"] + "<br />");
    var resultJSON = Platform.Function.ParseJSON(String(resp.headers["server"]));
    Platform.Response.Write("Return header ParseJSON: " + Stringify(resultJSON));
  } catch(e) {
    Write(Stringify(e));
  }
</script>

try 블록 안에는 "server"헤더를 인쇄하려는 시도가 있습니다 ( "Server", "location"등도 시도했습니다). 첫 번째 Stringify는 빈 개체를 반환합니다. 다른 두 시도는 "공용 언어 런타임 (CLR) 사용이 허용되지 않음"을 반환합니다.

누구든지이 문제에 대해 우리를 도울 수 있습니까? 미리 감사드립니다.

답변

Gortonington Nov 03 2020 at 22:16

해결책

의견에서 가져온 문제는 활성화해야하는 비즈니스 규칙이었습니다.

결국 지원팀은 "CLR 오류를 해결하는 비즈니스 규칙을 내부적으로 활성화"(인용)해야했습니다. 이제 모든 것이 예상대로 작동합니다.


그래서 코드를 내 환경에 복사 / 붙여 넣어 테스트하고 알아 냈습니다. 프로토콜이 설정되지 않은 엔드 포인트가 있습니다. 그래서 당신은 www.google.com대신 https://www.google.com.

이 변경으로 모든 것이 완전히 잘 작동했습니다.

<script runat="server" type="text/javascript">
  Platform.Load("core","1");
  var endpoint = "https://www.google.com";
  var req = new Script.Util.HttpRequest(endpoint);
  req.emptyContentHandling = 0;
  req.retries = 2;
  req.continueOnError = true;
  req.method = "GET";
  req.setHeader("Cache-Control","no-cache");
  var resp = req.send();
  try {
    Platform.Response.Write("Return header Stringify: " + Stringify(resp.headers) + "<br />");
    Platform.Response.Write("Return header: " + resp.headers["Server"] + "<br />");
    var resultJSON = Platform.Function.ParseJSON(String(resp.headers["server"]));
    Platform.Response.Write("Return header ParseJSON: " + Stringify(resultJSON));
  } catch(e) {
    Write(Stringify(e));
  }
</script>

이것은 위의 코드에서 얻은 응답입니다.

Return header Stringify: {"X-XSS-Protection":"0","X-Frame-Options":"SAMEORIGIN","Cache-Control":"private, max-age=0","Content-Type":"text/html; charset=ISO-8859-1","Date":"Tue, 03 Nov 2020 22:11:50 GMT","Expires":"-1","P3P":"CP=\"This is not a P3P policy! See g.co/p3phelp for more info.\"",...[truncated for brevity]...,"Transfer-Encoding":"chunked"}
Return header: gws
Return header ParseJSON: "undefined"