ZOHO deluge 脚本 getUrl() 函数可以读取 HTTP 响应标头吗?

Posted

技术标签:

【中文标题】ZOHO deluge 脚本 getUrl() 函数可以读取 HTTP 响应标头吗?【英文标题】:Can ZOHO deluge script getUrl() function read HTTP response headers? 【发布时间】:2019-06-01 07:25:06 【问题描述】:

当尝试使用 getUrl() 从具有基本 .htaccess 授权的 URL 获取 CSV 文件时,我被重定向到 AMAZON S3 位置。 getURL() 函数将原始 HTTP 标头(用于身份验证)传递给 Amazon S3,Amazon 认为这是一个 Amazon 令牌;这会导致响应中出现以下错误:

只允许一种身份验证机制;仅应指定 X-Amz-Algorithm 查询参数、Signature 查询字符串参数或 Authorization 标头

除了 Thompson Reuters 的建议之外,我在其他任何地方都没有看到过这个问题:https://community.developers.thomsonreuters.com/questions/29247/aws-download-x-direct-download-returns-invalid-arg.html

修复方法是接收来自远程服务器的重定向,查看响应并提取新的(重定向的)URL,然后从那里获取 CSV 文件,但标题中没有身份验证详细信息。

洪水脚本 ZOHO 中有没有办法做到这一点? getUrl() 函数看起来很基础,文档也很薄。

另一种方法是使用“中间件”应用程序,它可以使用 CURL,将 CSV 保存在远程服务器上,然后使用 ZOHO getUrl() 提取这些 CSV 文件。这不是最佳解决方案,但除非 ZOHO 允许访问某些 HTTP 客户端功能,否则我看不到其他方法。

【问题讨论】:

【参考方案1】:

这可以在 Deluge 中使用调用 URL 任务 - https://www.zoho.com/deluge/help/web-data/invokeurl-task.html#response。

invokeURL 可以将响应标头交给您,您可以从中获取重定向 URL,然后继续进行身份验证。

注意:如果您还有其他问题,请告诉我们或联系 support@zohodeluge.com。我们很乐意为您提供帮助。

【讨论】:

支持团队最初表示这是不可能的,因此放弃了这项工作。 解决方案是一种解决方法。 InvokeURL 现在配备了读取响应标头的功能。因此,解决方案可能是命中请求并失败。从响应中读取所需的标头(如果 Amazon 发送回响应标头,即使是 400 响应)。如果有帮助,然后向重定向 URL 发起第二个请求。如果您可以提供有关如何发出请求的更多详细信息,以及在响应中发回的内容以查看是否可以对重定向 URL 发出第二个请求,这也会很有帮助。 这正是我向您的支持团队建议的解决方案,他们说当我在今年早些时候进行此工作时这是不可能的。该项目已被放弃,因为您的平台不支持此功能或您的支持团队不知道。这是 Zoho 的典型特征。 读取响应标头的功能仅在 2019 年最后一个季度才推出。当时您提出问题时可能无法实现。并且可能会错过此更新。对造成的不便深表歉意。【参考方案2】:

要获取响应标头的详细信息,请在 invokeurl 请求中包含 detailed:true

示例:
// parameters is a Map
// header is a Map

response = invokeurl
[
    url :url
    type :POST
    parameters:parameters
    headers:header
    detailed:true
];

// To see all headers and content
info response;

// To see the http response code
info response.get('responseCode');

// With detailed:true any html or json returned will be put in responseText
// info response.get('responseText');

// To see the all http response headers
info response.get('responseHeader');

// To see a specific http response header
// Note: case matters in the response headers name
// "Content-Type" won't find "content-type"
info response.get('responseHeader').get('content-type');

// was the url redirected to another url?
info response.get('responseHeader').get('location');

// get the redirect url
redirect_url = response.get('responseHeader').get('location')

您可以从那里处理重定向 url 并将其传递给下一个 http 请求。

建议:

在工作了几个月后,包括detailed:true 和不包括它,我现在倾向于总是包括它。 detailed:true 包含更多有用的信息并具有有用的常规结构:responseCode: <code>, responseHeaders: <headers>, responseText: <returned-data>

【讨论】:

我不相信这在询问时是可能的。检查标题不是一种选择。很高兴看到它随着年龄的增长而变得更好。

以上是关于ZOHO deluge 脚本 getUrl() 函数可以读取 HTTP 响应标头吗?的主要内容,如果未能解决你的问题,请参考以下文章

Zoho Deluge:如何显示对象或变量的类型?

基于 deluge 中的多选下拉菜单从 zoho creator 搜索记录

Zoho Creator Deluge InvokeUrl:如何将表单参数传递给第三方表单?

Zoho Deluge:在决定使用地图、列表或集合的数据结构时要考虑哪些标准?

为啥需要一个 deluge 启动脚本?

通过 bat 脚本将 deluge torrentname 传递给 powershell