UrlFetchApp.fetch API "Request contains invalid authentication headers"(cURL 有效)
UrlFetchApp.fetch API "Request contains invalid authentication headers" (cURL works)
使用 PHP 和 cURL 可以发出 API 请求,但我无法使用 UrlFetchApp
在 Google Apps 脚本中使用它
工作PHP代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: ".$contenttype, "X-BOL-Date:" .$date, "X-BOL-Authorization: ".$signature));
curl_setopt($ch, CURLOPT_URL, $url.$uri);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PORT, $port);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
if(curl_errno($ch))
{
print_r(curl_errno($ch), true);
}
$result = curl_exec($ch);
curl_close($ch);
现在我在 Google 应用程序中创建的版本:
var options =
{
"method": "GET",
"content-Type": contenttype,
"X-BOL-Date": date,
"X-BOL-Authorization": signature,
"muteHttpExceptions": true,
};
var response = UrlFetchApp.fetch(url+uri, options);
// Check return code embedded in response.
var rc = response.getResponseCode();
var responseText = response.getContentText();
if (rc !== 200) {
// Log HTTP Error
Logger.log("Response (%s) %s",
rc,
responseText );
}
else {
// Successful GET, handle response normally
Logger.log( responseText );
}
使用它会引发 "Request contains invalid authentication headers" 错误。
根据文档可能的原因:
"One of the mandatory request headers is missing or date header is not between +/- 15 minutes of the server time in GMT."
header 中使用的值(格林威治标准时间日期,签名)与 PHP 中的输出相同。据我所知,其他所有内容也相同。
所以显然 UrlFetchApp 不会发送与 cURL 完全相同的 headers。
如果X-BOL-Date
和X-BOL-Authorization
需要包含在header中,请尝试以下修改。
发件人:
var options = {
"method": "GET",
"content-Type": contenttype,
"X-BOL-Date": date,
"X-BOL-Authorization": signature,
"muteHttpExceptions": true,
};
收件人:
var options = {
method: "get",
headers: {
"Content-Type": contenttype,
"X-BOL-Date": date,
"X-BOL-Authorization": signature,
},
muteHttpExceptions: true,
};
我不知道这是否有效,因为我不能 运行 这个。所以,如果这不起作用,我很抱歉。
使用 PHP 和 cURL 可以发出 API 请求,但我无法使用 UrlFetchApp
在 Google Apps 脚本中使用它工作PHP代码:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: ".$contenttype, "X-BOL-Date:" .$date, "X-BOL-Authorization: ".$signature));
curl_setopt($ch, CURLOPT_URL, $url.$uri);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PORT, $port);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
if(curl_errno($ch))
{
print_r(curl_errno($ch), true);
}
$result = curl_exec($ch);
curl_close($ch);
现在我在 Google 应用程序中创建的版本:
var options =
{
"method": "GET",
"content-Type": contenttype,
"X-BOL-Date": date,
"X-BOL-Authorization": signature,
"muteHttpExceptions": true,
};
var response = UrlFetchApp.fetch(url+uri, options);
// Check return code embedded in response.
var rc = response.getResponseCode();
var responseText = response.getContentText();
if (rc !== 200) {
// Log HTTP Error
Logger.log("Response (%s) %s",
rc,
responseText );
}
else {
// Successful GET, handle response normally
Logger.log( responseText );
}
使用它会引发 "Request contains invalid authentication headers" 错误。 根据文档可能的原因:
"One of the mandatory request headers is missing or date header is not between +/- 15 minutes of the server time in GMT."
header 中使用的值(格林威治标准时间日期,签名)与 PHP 中的输出相同。据我所知,其他所有内容也相同。
所以显然 UrlFetchApp 不会发送与 cURL 完全相同的 headers。
如果X-BOL-Date
和X-BOL-Authorization
需要包含在header中,请尝试以下修改。
发件人:
var options = {
"method": "GET",
"content-Type": contenttype,
"X-BOL-Date": date,
"X-BOL-Authorization": signature,
"muteHttpExceptions": true,
};
收件人:
var options = {
method: "get",
headers: {
"Content-Type": contenttype,
"X-BOL-Date": date,
"X-BOL-Authorization": signature,
},
muteHttpExceptions: true,
};
我不知道这是否有效,因为我不能 运行 这个。所以,如果这不起作用,我很抱歉。