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

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

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

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

JavaScript

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

Q&A

解決済

2回答

2823閲覧

GASで作成したウェブアプリケーションへGET通信したいのですがうまくいきません

xu0124

総合スコア31

Google Apps Script

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

JavaScript

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

0グッド

0クリップ

投稿2019/08/11 15:47

GASで作成したウェブアプリケーションへGET通信したいのですが、うまくいきません。

環境:Adobe ExtendScript Toolkit CC
言語:Extend Script

原因が全然わからないので、もしわかる方がいらっしゃいましたら、よろしくお願いします。

参考サイト

http://chocolife.blog80.fc2.com/blog-entry-79.html

GASで作成したウェブアプリケーション

ウェブアプリケーションのURL

実際のコード

javascript

1var reply = ""; 2var conn = new Socket; 3if (conn.open ("script.google.com:80")) { 4conn.write ('GET' + ' /macros/s/AKfycbzrGvQGGzyKS2tidre9gHrwNFBub3zItraE7DFynniHvYhw_FBL/exec' + 'HTTP/1.0\r\n' 5 + 'Host: ' + 'script.google.com' + '\r\n' 6 + 'User-Agent: ' + 'InDesign/6.0' + '(Macintosh; U; Intel Mac OS X 10_5_6; ja-jp)' + '\r\n' 7 + 'Authorization: Basic username:password' + '\r\n' 8 + '\r\n'); 9reply = conn.read(999999); 10$.writeln(reply); 11conn.close(); 12}

返ってくるreplyの内容

HTTP/1.0 404 Not Found Content-Type: text/html; charset=UTF-8 Referrer-Policy: no-referrer Content-Length: 1639 Date: Sun, 11 Aug 2019 15:31:12 GMT <!DOCTYPE html> <html lang=en> <meta charset=utf-8> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> <title>Error 404 (Not Found)!!1</title> <style> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} </style> <a href=//www.google.com/><span id=logo aria-label=Google></span></a> <p><b>404.</b> <ins>That���s an error.</ins> <p>The requested URL <code>/macros/s/AKfycbzrGvQGGzyKS2tidre9gHrwNFBub3zItraE7DFynniHvYhw_FBL/execHTTP/1.0</code> was not found on this server. <ins>That���s all we know.</ins> 結果 : true

ちなみにhttps://www.yahoo.co.jp/で試した場合

var reply = ""; var conn = new Socket; if (conn.open ("www.yahoo.co.jp:80")) { conn.write ('GET' + '/' + 'HTTP/1.0\r\n' + 'Host: ' + 'www.yahoo.co.jp' + '\r\n' + 'User-Agent: ' + 'InDesign/6.0' + '(Macintosh; U; Intel Mac OS X 10_5_6; ja-jp)' + '\r\n' + 'Authorization: Basic username:password' + '\r\n' + '\r\n'); reply = conn.read(999999); $.writeln(reply); conn.close(); }
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> 省略 </head> <body class="yj950-1"> 省略 </body> </html> 結果 : true

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

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

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

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

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

guest

回答2

0

404 がもどってきているということは、通信自体は成功していますね。
アクセスしようとしているURLがまずは問題なのだと思います。
コードをみて気になったのが、

conn.write ('GET' + ' /macros/s/AKfycbzrGvQGGzyKS2tidre9gHrwNFBub3zItraE7DFynniHvYhw_FBL/exec' + 'HTTP/1.0\r\n'

の部分で , ' HTTP/1.0\r\n' とスペースを一ついれておかないとダメなんじゃないでしょうか。
※ 今は/macros/s/AKfycbzrGvQGGzyKS2tidre9gHrwNFBub3zItraE7DFynniHvYhw_FBL/execHTTP/1.0 というPATHにアクセスしてしまっている。
※ Yahooのときも同じ問題がありますが、単に「指定のページは存在しません」からのリダイレクトがかかっていて気が付かなかったのかな、と思います。

投稿2019/08/12 00:47

mokemokechicken

総合スコア948

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

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

xu0124

2019/08/12 02:41

半角あけて ' HTTP/1.0\r\n'としてみたのですが、結果変わらず。 よくわからないのですが、Basic認証部分も関係ありそうな気がしてきました。
mokemokechicken

2019/08/12 03:00

その場合のResponseはどうなりましたか? 403 とかならBasic認証周りだと思います。
xu0124

2019/08/12 03:07

すみません403ではないです。 半角スペースをあけたことで HTTP/1.0 301 Moved Permanently と内容が変わりました。通信ができていてリダイレクトされているのですが、意図したURLにはアクセスできていないじょうたいです。
mokemokechicken

2019/08/12 03:12

ご存知かもしれないですが、 そのときは Location: ヘッダーのURLにリダイレクトが指示されています。 実際に、 質問に書かれているURL https://script.google.com/macros/s/AKfycbzrGvQGGzyKS2tidre9gHrwNFBub3zItraE7DFynniHvYhw_FBL/exec にアクセスするとリダイレクトされて https://script.googleusercontent.com/macros/echo?user_content_key=fxnczP69ArbPkyXPxu4ubz_uwGyBHc2-wZxRIBF4iE7P0g2emdh3Lx86k5xBKD1ftdbtapKe4_rcTvtDBC6W9P1cm2g32nadm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnDeUY_YR0fxsZ0dAdl9MCSoZKhYNULYVhhKLvr8fYb7ZiGjcT1IqR7hCA8rmoFQclTrDzVg-v1In&lib=MyK52mO6SZzc4KT11mttcjNIQuu5xNYjQ などに飛ばされるようなので、 それが正しい動作なのではないでしょうか。 ※ あと Basic認証は不要に思いますが、、、どうなのでしょうか。
mokemokechicken

2019/08/12 03:16

上記のSocketクラスは、平文を送受信する機能しか無いように見えますね。 HTTPSにしようと思うなら、これだけだと無理なんじゃないかと思います。 ※ もう少し高機能なAPIじゃないと難しそう。
guest

0

ベストアンサー

ソースコードのURLにHTTPでアクセスすると301が返されています。これは、指定のURLに移動せよというメッセージです(リダイレクトというやつです)。
HTTPを喋るためのライブラリ等を使用しているのであれば、普通は自動で指定のURLにリクエストを飛ばしてくれますが、Socketはそこまでやってくれません。そのため、301が帰ってきたときの処理を開発者自身が実装する必要があります。

ここで問題になるのが、リダイレクト先のURLがHTTPSである点です。HTTPはアルファベットの平文でやりとりしているので、人間が直接打ち込むこともできますが、HTTPSは暗号化したやりとりになっているので、専用のライブラリを使用しないと扱えません。
Extend Scriptで使用できるHTTPS通信を行うためのライブラリ等を探す必要があります。

Basic認証部分も関係ありそうな気がしてきました。
調べてみて、これと似たような問題がある気がしてます。

こちらは特に関係ありません。Basic認証を要求されるのであれば、ブラウザでアクセスした際に認証画面が表示されますし、レスポンスヘッダを確認すると401が返されます。そのいずれも発生していません。

投稿2019/08/30 02:03

uS_aito

総合スコア145

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

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

xu0124

2019/09/02 13:12

解決すべき問題がわかりました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問