英文:
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!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。



评论