Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 在同一脚本中通过UrlFetchApp进行两次请求时使用不同的IP_Google Apps Script - Fatal编程技术网

Google apps script 在同一脚本中通过UrlFetchApp进行两次请求时使用不同的IP

Google apps script 在同一脚本中通过UrlFetchApp进行两次请求时使用不同的IP,google-apps-script,Google Apps Script,当Google应用程序脚本由一个时间触发器执行,并使用UrlFetchApp发出两个subsequest请求时,这两个请求都是由具有相同IP的同一服务器发出的,我们能相信吗 我需要确保这一点,因为在一个请求中,我查询远程服务的访问令牌,而在另一个请求中,我使用这个访问令牌。我查询的远程服务将检查客户端是否使用与使用此访问令牌的请求相同的IP请求访问令牌 编辑 我通过触发一些只包含几个连续UrlFetchApp请求的哑脚本并检查服务器日志来检查行为。我有两个明确的观察结果: IP可能在一个触发器内

当Google应用程序脚本由一个时间触发器执行,并使用UrlFetchApp发出两个subsequest请求时,这两个请求都是由具有相同IP的同一服务器发出的,我们能相信吗

我需要确保这一点,因为在一个请求中,我查询远程服务的访问令牌,而在另一个请求中,我使用这个访问令牌。我查询的远程服务将检查客户端是否使用与使用此访问令牌的请求相同的IP请求访问令牌

编辑

我通过触发一些只包含几个连续UrlFetchApp请求的哑脚本并检查服务器日志来检查行为。我有两个明确的观察结果:

  • IP可能在一个触发器内的连续呼叫中发生变化
  • IP之间有明显的轮换,有时使用相同的IP连续呼叫7次,有时是6次。但总的来说,总有一些群体
  • 因为我只想在我的脚本中使用谷歌基础设施,偶尔的失败不是问题,所以我想出了一个丑陋但有效的解决方案:

    function batchRequest(userLogin, userPassword, webapiKey, resource, attributes, values ){
      var token = requestToken(userLogin, userPassword, webapiKey ); // requestToken method uses UrlFetchApp.fetch
      var result = request(resource, token,  attributes, values); // requestToken method uses UrlFetchApp.fetch with options.muteHttpExceptions set to true so that we can read the response code
    
      var i = 0;
      while (result.getResponseCode() == 500 && i < 10){
        token = requestToken(userLogin, userPassword, webapiKey ); // requestToken method uses UrlFetchApp.fetch
        result = request(resource, token,  attributes, values);
        i++;
      }
      return result;
    }
    
    函数batchRequest(userLogin、userPassword、webapiKey、资源、属性、值){
    var-token=requestToken(userLogin、userPassword、webapiKey);//requestToken方法使用UrlFetchApp.fetch
    var result=request(资源、令牌、属性、值);//requestToken方法使用UrlFetchApp.fetch,并将options.muteHttpExceptions设置为true,以便读取响应代码
    var i=0;
    while(result.getResponseCode()==500&&i<10){
    token=requestToken(userLogin、userPassword、webapiKey);//requestToken方法使用UrlFetchApp.fetch
    结果=请求(资源、令牌、属性、值);
    i++;
    }
    返回结果;
    }
    
    因此,我只是努力尝试最多10次,并希望连接到两个请求 — 一个用于令牌,另一个用于某些业务逻辑 — 在同一“IP组”中完成


    我在这里做了更详细的描述:

    在同一个触发器调用中是。从另一个触发器编号。根据经验,但我没有看到此文档。

    我观察到不同的行为->一旦我从脚本编辑器中执行脚本,它确实会对两个请求使用相同的IP,但一旦执行时间触发,它的行为是可预测的,有时使用相同的IP。这对我的东西不好。任何人都知道确保同一服务器进行两次后续抓取的解决方法?你是说在同一个触发器调用中,当你连续两次调用urlFetch时,ip会发生变化?是-实际执行请求的服务器的ip。我想谷歌是这样的。但我有时会观察到这种情况,而且只有在脚本的执行被时间触发器触发时才会观察到这种情况。但无论如何,这有时会产生巨大的差异,因为我不能依赖于它。差异可能与缓存有关,我相信从触发器获取urlFetch具有不同的默认值,所以请尝试硬编码缓存选项。两个URL都相同吗?我尝试了捕获,但与此无关-但无论如何,谢谢你的建议。我决定检查这种行为,并将其记录在这里: