原本想用 DataDog 的 Sythetics API Test 做 e2e monitoring & alarm 但是遇到 multi-part form-data 沒辦法在 Request Body 使用 \r\n 的問題
curl -i -X --trace-ascii - -F 'key=key1' -F 'key2=key2' https://whatever.totest.com/auth
你可以看到送出的 Content-Length 和 Request Body 是
Content-Length: YYY
Content-Type: multipart/form-data; boundary=xxxx
--xxxx
Content-Disposition: form-data; name="key1"
key1
--xxxx
Content-Disposition: form-data; name="key2"
key2
--xxxx--
curl -i -X --trace-ascii - -F 'key=key1' -F 'key2=key2' https://whatever.totest.com/auth
你可以看到送出的 Content-Length 和 Request Body 是
Content-Length: YYY
Content-Type: multipart/form-data; boundary=xxxx
--xxxx
Content-Disposition: form-data; name="key1"
key1
--xxxx
Content-Disposition: form-data; name="key2"
key2
--xxxx--
但是使用 DataDog 送出去的話只會用 \n 和 curl 送出的一比較,就發現 Content-Length 比較小,但是 DataDog 似乎沒辦法改..
試了一下 AWS CloudWatch Synthetics Canary 發現他其實就是 deploy 一個 nodejs lambda layer 裡面執行 Puppeteer, Chromium 和 AWS SDK 但是又整合了 cloudwatch dashoboard, cloudwatch logs 和 cloudwatch alarm,所以不只可以跑 script 還可以透過 chromium 去抓網頁的 screenshot 彈性超大!
另外一個好處是可以編輯要送出去的 postData,一開始我看他預設也是送 \n 會造成 invalid request 但是只要改成 \r\n 就好囉!
留言
張貼留言