如何向 Google Apps Script Web App 发送有效的 HTTP 请求?
Posted
技术标签:
【中文标题】如何向 Google Apps Script Web App 发送有效的 HTTP 请求?【英文标题】:How to send a valid HTTP request to a Google Apps Script Web App? 【发布时间】:2021-02-03 18:17:47 【问题描述】:我们从 C++ 应用程序 (Arduino Sketck) 向 Google 应用脚本网络应用程序 发送了一个 HTTP 请求,但我们得到了 HTTP 响应:HTTP/1.1 302 Moved Temporarily。带有 http 请求的 url 在浏览器中可以正常工作。
相同的代码也适用于其他网站,例如www.google.com。不要使用 script.google.com。
Google Apps 脚本发布的网络应用程序是公开的,任何人甚至匿名都可以访问:
这里是我们使用的代码。
client.println("GET /macros/s/AKfycbyQnmHekk4_NNy3Bl5ILzuSRkykMWaXQ7Rtojk7fFieDUbVqNM/exec?valore=7 HTTP/1.1");
client.println("Host: script.google.com");
client.println("Connection: close");
client.println();
答案是:
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Wed, 03 Feb 2021 09:29:02 GMT
Location: https://script.google.com/macros/s/AKfycbyQnmHekk4_NNy3Bl5ILzuSRkykMWaXQ7Rtojk7fFieDUbVqNM/exec?valore=7
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
X-XSS-Protection: 1; mode=block
Server: GSE
Accept-Ranges: none
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
11e
<HTML>
<HEAD>
<TITLE>Moved Permanently</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Permanently</H1>
The document has moved <A HREF="https://script.google.com/macros/s/AKfycbyQnmHekk4_NNy3Bl5ILzuSRkykMWaXQ7Rtojk7fFieDUbVqNM/exec?valore=7">here</A>.
</BODY>
</HTML>
0
disconnecting from server.
网址正确( http://script.google.com/macros/s/AKfycbyQnmHekk4_NNy3Bl5ILzuSRkykMWaXQ7Rtojk7fFieDUbVqNM/exec?valore=7) 但似乎谷歌应用程序脚本网络应用程序将请求重定向(到相同的 url,使用 https 协议)。
使用相同的代码,我们从 Arduino 发出了其他 HTTP 请求,并且运行良好。 例如我们做了:
client.println("GET /search?q=arduino HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
我们得到了响应 ``HTTP/1.1 200 OK ```,并且 html 响应包含根据查询 q=arduino 的搜索结果
关于我们如何向 Google Apps 脚本网络应用发送有效的 http/https 请求有什么建议吗?
谢谢。
【问题讨论】:
【参考方案1】:如您所见,Google 脚本应用程序将您从 HTTP 重定向到 HTTPS。一些谷歌网站可以通过 HTTP 访问,如果他们不想,他们不必重定向到 HTTPS。在您的示例中,http://www.google.com/search?q=arduino 确实重定向到 https://www.google.com/search?q=arduino&gws_rd=ssl。但是,您的客户端没有在请求中发送 User-Agent
标头,因此 Google 知道您的客户端不是浏览器,并且在您的情况下可能不会发出重定向。但在真正的浏览器中,确实如此。
将 URL http://script.google.com/macros/s/AKfycbyQnmHekk4_NNy3Bl5ILzuSRkykMWaXQ7Rtojk7fFieDUbVqNM/exec?valore=7 放入浏览器会重定向到 https://script.google.com/macros/s/AKfycbyQnmHekk4_NNy3Bl5ILzuSRkykMWaXQ7Rtojk7fFieDUbVqNM/exec?valore=7。真正的浏览器会自动跟随该重定向,用户甚至可能不会注意到其中的差异。
但是您的客户必须手动进行重定向。这意味着从响应中提取 Location
标头,关闭现有连接(到端口 80 上的 script.google.com
),连接到指定服务器(端口 443 上的 script.google.com
),并使用最终发送 HTTP 请求之前的服务器。
SSL/TLS 很复杂,HTTP 有很多规则。不要尝试手动实现它们。最好使用内置 HTTPS 支持的现有 HTTP 库。让它为您处理所有这些细节。
【讨论】:
以上是关于如何向 Google Apps Script Web App 发送有效的 HTTP 请求?的主要内容,如果未能解决你的问题,请参考以下文章
将身份验证从一个 Google Apps Script webapp 传递到另一个 Google Apps Script webapp
允许匿名访问 Google Apps Script Web 应用程序(Google Apps 帐户)
该脚本工作正常,但不在“google-apps-script”中
Google-apps-script 函数 CHAR() 和 CODE()