python - 如何在 Google Script 中从这个特定的 POST HTTP 调用中获取结果 - 在 python 中运行良好
问题描述
我在 python 中得到了这个简单的脚本
import requests
val = "id"
data = {
'val': val,
'type': '1'
}
session = requests.session()
response = session.post('https://www.someweb.com/modules/output/ajax.check_results.php', data=data)
print(response.json())
出于安全原因,我不允许透露正确的网址。
我不知道python(我可以在我的计算机上运行上面的代码并且它运行良好)所以我想将代码移植到谷歌应用程序脚本。目前看起来是这样的
function getResults() {
var url = 'https://www.someweb.com/modules/output/ajax.check_results.php';
var data = {
'val': 'id',
'type': '1'
}
var options = {
"method": "post",
// "headers": headers,
"data": data
};
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getContent);
Logger.log(response);
Logger.log(response.getAllHeaders());
Logger.log(response.getResponseCode());
Logger.log(response.getContentText());
//Logger.log(JSON.parse(response.getContent()));
//Logger.log(JSON.parse(response.getContentText()));
//Logger.log(JSON.parse(response));
}
输出看起来像这样
2:47:22 PM Notice Execution started
2:47:22 PM Info function () { [native code] }
2:47:22 PM Info
2:47:22 PM Info {Content-Type=text/html; charset=UTF-8, Expires=Thu, 19 Nov 1981 08:52:00 GMT, Date=Sun, 24 Jan 2021 13:47:22 GMT, Set-Cookie=PHPSESSID=ibdotvlrrec1q6glnbe8i0iu23; path=/, Server=Apache/2.4.38 (Debian), Cache-Control=private, must-revalidate, Content-Length=0, Pragma=no-cache, keep-alive=timeout=5, max=100, Connection=Keep-Alive}
2:47:22 PM Info 200.0
2:47:22 PM Info
2:47:23 PM Notice Execution completed
评论的记录器给了我
3:14:03 PM Error SyntaxError: Unexpected end of JSON input getResults @
我认为问题在于 Google Script 需要一秒钟才能完成,但 python 需要 14 秒。它等待得到结果。
有人可以帮助如何制作谷歌脚本来获得结果吗?
解决方案
查看UrlFetchApp.fetch()
. data
不是可用参数之一。您应该改用并作为字符串payload
传递。data
function getResults() {
const url = 'https://www.someweb.com/modules/output/ajax.check_results.php';
const data = {
'val': 'id',
'type': '1'
};
const options = {
'method': 'post',
'payload': JSON.stringify(data)
};
const response = UrlFetchApp.fetch(url, options);
console.log(response.getContentText()); // string
console.log(JSON.parse(response.getContentText())); // object, if it can be parsed
}
您收到的错误来自JSON.parse(response.getContent())
,因为JSON.parse()
需要一个字符串,但getContent()
返回一个原始二进制数据数组。根据我上面的示例,您应该getContentText()
改用。
推荐阅读
- javascript - 如何使用主键和辅助键对数据进行非规范化
- hibernate - 当我使用 2 ManyToMany 关系时,HibernateJpaConfiguration java.lang.NullPointerException
- amazon-web-services - 在 AWS 上部署时未找到 hugo 命令
- google-chrome - 如何撤消在浏览器地址栏中输入的内容
- sql - 获得第二高的薪水,如果没有第二高则返回 null
- python-3.x - 滚动条不起作用,是否正确设置了滚动区域?
- video - 是否可以从网站重定向或获取实时视频数据?
- scala - 文档中的 Akka HTTP 路由 DSL 示例不起作用
- vba - VBA有没有办法在目录中找到一个字符串然后循环?
- c# - 无法强制 DataGridView 生成列