SSJS: baca header respons dari objek Script.Util.HttpRequest di SFMC
Kita perlu mengambil header respon dari panggilan HTTP GET yang dikeluarkan di SSJS dengan fungsi Script.Util.HttpRequest.
Sayangnya, meskipun tampaknya mudah dan tugas itu sendiri cukup sepele, kami tidak bisa memahaminya.
Kami sudah membaca jawaban dengan (besar) Gortonington untuk ini benang yang sangat baru-baru ini, namun acara meskipun titik terang, itu tidak memecahkan masalah kita.
Kami memahami bahwa header dikembalikan sebagai objek CLR, tetapi ternyata kami melakukan sesuatu yang salah.
Di bawah ini adalah (satu dari banyak) cuplikan kode yang menjelaskan apa yang ingin kami capai:
<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>
Di dalam blok percobaan ada beberapa upaya untuk mencetak header "server" (kami juga mencoba "Server", "lokasi" dan lainnya). Stringify pertama mengembalikan objek kosong. Dua upaya lainnya menghasilkan: "Penggunaan Common Language Runtime (CLR) tidak diizinkan".
Adakah yang bisa membantu kami dalam masalah ini? Terima kasih sebelumnya.
Jawaban
LARUTAN
Diambil dari komentar, masalahnya adalah aturan bisnis yang perlu diaktifkan:
Pada akhirnya, dukungan harus (mengutipnya) "mengaktifkan aturan bisnis secara internal yang menyelesaikan kesalahan CLR." Sekarang semuanya berfungsi seperti yang diharapkan.
Jadi, saya menyalin / menempelkan kode Anda ke lingkungan saya untuk mengujinya dan menemukannya. Anda memiliki titik akhir tanpa set protokol. Jadi, Anda harus www.google.commelakukannya https://www.google.com.
Dengan perubahan ini semuanya bekerja dengan baik.
<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>
Ini adalah respon yang saya dapat dari kode di atas:
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"