英文:
Is it possible in Google Sheets to call a URL with the client's IP
问题
I need users to receive a response from a certain server based on the token they type, but if many incorrect responses are sent to it, the server blocks the IP address that sent the wrong token.
Since I don't want the Google Script server to be blocked, is there a possibility to make the client send the request through his private IP?
Right now what I'm doing is a decidedly inelegant form. I ask the client to enter the link and enter the response to SpreadsheetApp.getUi().prompt();
英文:
I need users to receive a response from a certain server based on the token they type, but if many incorrect responses are sent to it, the server blocks the IP address that sent the wrong token
Since I don't want the Google Script server to be blocked, is there a possibility to make the client send the request through his private IP?
Right now what I'm doing is a decidedly inelegant form
I ask the client to enter the link and enter the response to SpreadsheetApp.getUi().prompt();
答案1
得分: 1
根据描述,我会假设为了从服务器获得响应,正在使用URL提取服务。如果是这样的话,API文档指出请求始终来自特定的IP范围,这意味着从Apps Script后端是不可能的,但有一种解决方法,但需要
- 创建一个侧边栏
- 运行一个fetch()函数(这在AJAX中运行,因此在客户端运行)
结果会看起来像这样:
HTML文件在此示例中称为index,看起来像这样:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<input type="button" onclick="fetching()"value="clickme"></input>
</br>
<div id="field"></div>
<script>
function fetching(){
fetch('https://httpbin.org/anything')
.then(response => response.json())
//.then(json => console.log(json))
.then(json => document.getElementById("field").innerHTML= "Response: "+JSON.stringify(json.origin))
}
</script>
</body>
</html>
代码文件看起来像这样:
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu('Custom Menu')
.addItem('Show sidebar', 'showSidebar')
.addToUi();
}
function showSidebar() {
var html = HtmlService.createHtmlOutputFromFile('index.html')
.setTitle('My custom sidebar');
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.showSidebar(html);
}
你还可以复制这个Google表格,以获得可以用作基础的实际示例,请注意,该代码是GET请求,仅旨在说明其工作方式,似乎你需要的是POST请求,你可以使用此指南。
希望这对你有所帮助!
英文:
Based on the description I would assume that in order to receive a response from the server the URL fetch service is being used, if so, the API documentation states that the requests will always come from a specific set of IPs, this means that from Apps Script backend this is not possible but there is a workaround but it requires to
- Create a Sidebar
- Run a fetch() function (This runs in AJAX so it runs in the client's side)
The result will look something like this:
The HTML file is called index in this example and it looks like this:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<input type="button" onclick="fetching()"value="clickme"></input>
</br>
<div id="field"></div>
<script>
function fetching(){
fetch('https://httpbin.org/anything')
.then(response => response.json())
//.then(json => console.log(json))
.then(json => document.getElementById("field").innerHTML= "Response: "+JSON.stringify(json.origin))
}
</script>
</body>
</html>
And the code file looks like this:
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu('Custom Menu')
.addItem('Show sidebar', 'showSidebar')
.addToUi();
}
function showSidebar() {
var html = HtmlService.createHtmlOutputFromFile('index.html')
.setTitle('My custom sidebar');
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.showSidebar(html);
}
You could also copy this Google sheet to have a working example that you can use as a base, please keep in mind that the code is a GET request and is only meant to illustrate the way this works, it seems like what you would need is a POST request, to do that you can use this guide
Hope this helps!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论