我想使用Google Apps脚本访问受IP地址限制的API(Vitelity),此外还需要用户名和密码。我已经搜索了文档,并且没有找到答案,Google Apps脚本是否总是来自单个IP地址(今天66.102.6.53),或者请求IP是否会发生变化从白天到日。
我写了并且调用了以下函数:
function getVitelityBalance() {
var txtResponse = UrlFetchApp.fetch("http://api.vitelity.net/api.php?login=ourUserName&pass=ourPassword&cmd=balance").getContentText();
doc = Xml.parse(txtResponse, true);
balance = doc.response;
Logger.log(balance);
};
执行记录会返回一个回复,表示发出请求的IP地址未经授权。显然我可以将此IP地址列入白名单,但Google Apps总是会从同一个IP地址发出请求,还是会一直在变化,这样这段代码总是会破坏?
[14-10-07 08:43:25:201 PDT] Starting execution
[14-10-07 08:43:25:306 PDT] UrlFetchApp.fetch([http://api.vitelity.net/api.php?login=ourUserName&pass=ourPassword=balance]) [0.084 seconds]
[14-10-07 08:43:25:307 PDT] HTTPResponse.getContentText() [0 seconds]
[14-10-07 08:43:25:331 PDT] Xml.parse([ <html>
<body>
<font face="verdana" size="2">Vitelity Communications API. Unauthorized access prohibited. All commands are logged along with IP and username.<br><br><pre style="font-size: 12px; font-family: verdana">
**x[[Unauthorized access attempt from 66.102.6.53[[x, true]) [0.024 seconds]**
[14-10-07 08:43:25:332 PDT] Logger.log([undefined, []]) [0 seconds]
[14-10-07 08:43:25:333 PDT] Execution succeeded [0.112 seconds total runtime]
答案 0 :(得分:0)
我不知道您问题的答案,但如果您无法自行验证,您可能不希望依赖于保持不变的值。您是否可以将API服务器配置为接受授权标头?然后,您可以使用选项创建UrlFetchApp.fetch()请求,并使用您自己生成的令牌设置标头以执行授权。您也可以将其直接编码到请求本身的URL中,尽管这样不太安全。只是一个想法,因为如果你可以将IP地址列入白名单,听起来你可以控制API服务器。
考虑到上面提到的内容,我想到的唯一其他解决方案就是实验:查看IP地址是否从获取到提取以及日常更改。加入一些错误处理,在授权失败时自动通知您。我有一些脚本设置为每当他们抛出异常时给我发电子邮件,幸运的是,这通常不常见。在您的情况下,您可以通过这种方式获得,只需很少更改白名单上的IP地址。当然,我无法知道这对你的特定问题有多实用 - 这也是一个非常明显(而且有点懒惰)的解决方法。其他人可能有更好的答案!