質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

6393閲覧

GASでHEADERにContent-Type:をつけずにPOSTする。

sanepy

総合スコア12

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/05/28 11:21

前提、実現したいこと。

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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

javascript

1function q191861() { 2 const params = {"method":"post","contentType":""}; 3 const r = UrlFetchApp.fetch("https://httpbin.org/anything", params); 4 Logger.log(r); 5} 6/* Loggerの表示 7[19-05-28 23:23:45:561 JST] { 8 "args": {}, 9 "data": "", 10 "files": {}, 11 "form": {}, 12 "headers": { 13 "Accept-Encoding": "gzip,deflate,br", 14 "Content-Length": "0", 15 "Host": "httpbin.org", 16 "User-Agent": "Mozilla/5.0 (compatible; Google-Apps-Script)" 17 }, 18 "json": null, 19 "method": "POST", 20 "origin": "107.178.194.176, 107.178.194.176", 21 "url": "https://httpbin.org/anything" 22} 23*/

投稿2019/05/28 14:25

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanepy

2019/05/28 15:03

他のHEADERの項目はどうやれば含めることができますか?
sanepy

2019/05/29 09:53

値こそ設定されていませんが、Headerに「Content-Type:」と表示されてしまいます。 こうではなく、Content-Type:そのものをHTTPリクエストのHEADERから(content-type:の項目の存在そのものを)削除する方法をご教示願いたいです。
papinianus

2019/05/29 09:57

その意図は汲んでいましたが、httpbinでは出なかったのでできるのかと思いました。 もともとurlfetchはcontent-typeのデフォルト値を持つのでこれでできなければgasでは無理なように思えます。 他の回答をお待ちください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問