前提、実現したいこと。
Google Apps ScriptでWebページの内容をスクレイピングしたいと考えています。
GASからUrlFetchAppを使ってAPIにHTTPリクエストを送信すると、取得するべき内容がレスポンスとして返ってくるので、これを取得しようとしています。
(GAS以外のソフトを使い、HTTPリクエストを投げれば答えが返ってくることは確認済みです。)
そのAPIが動作が独特で、HTTPリクエストのHeaderの値が少しでも違うと、エラー(500や418など)を返してきます。
なお、POSTですがbody(payload)はありません。
GASとGAS以外で全く同じ内容でPOSTしてみたのですが、異なる結果が返ってきました。
RequestBinでそれぞれのリクエストの内容を表示し確認したところ、GAS以外のフリーソフトでは、HEADERの「Content-Type:」の値を指定せずにPOSTすると、「Content-Type:」なしで投げられていたのに対して、GASで投げた場合には、勝手に「Content-Type: application/x-www-form-urlencoded」が設定されていました。
BODY部分がないため、「Content-Type:」を設定する必要は全くありません。どうすればHEADERに「Content-Type: 」を設定せずにHTTPリクエストを送ることができるでしょうか。
UrlFetchAppが無理なら、代替策を教えてください。
コード
javascript
1function sendPostRequestwordtogeo2(token,cookie){ 2 Logger.log(token) 3 Logger.log(cookie) 4 var headers = { 5 'connection': 'keep-alive', 6 'x-csrf-token':token, 7 'cookie':cookie, 8 'Origin': 'https://www.example.com', 9 'x-requested-with': 'XMLHttpRequest', 10 'accept-language': 'ja-JP', 11 'Accept': '*/*', 12 'Referer': 'https://www.example.com/ja-JP/stores/', 13 'Content-Length':0, 14 }; 15 var payload = { 16}; 17 var options = { 18 'headers': headers, 19 'method': 'POST', 20 muteHttpExceptions: true, 21 }; 22 23 var fetch2 = UrlFetchApp.fetch('https://www.example.com/rtapi/locations/v2/autocomplete?query=XXXX',options); 24Logger.log(fetch2)

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/28 15:03
2019/05/28 15:18
2019/05/29 09:53
2019/05/29 09:57