Curl UrlFetchApp.fetch API“;请求包含无效的身份验证标头“;(工程)

Curl UrlFetchApp.fetch API“;请求包含无效的身份验证标头“;(工程),curl,google-apps-script,urlfetch,php-curl,Curl,Google Apps Script,Urlfetch,Php Curl,使用带有cURL的PHP生成API请求是可行的,但我无法在使用UrlFetchApp的GoogleApps脚本中实现它 工作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

使用带有cURL的PHP生成API请求是可行的,但我无法在使用UrlFetchApp的GoogleApps脚本中实现它

工作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); 
现在是我在谷歌应用程序中创建的版本:

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 );
}
使用此选项会引发“请求包含无效的身份验证头”错误。 可能的原因如下:

“其中一个强制请求标头缺失,或者日期标头不在服务器时间的+/-15分钟(以GMT为单位)。”

标头中使用的值(日期为GMT时间,签名)与PHP中的输出相同。据我所知,其他一切都是一样的


显然,UrlFetchApp发送的头与cURL发送的头并不完全相同

如果标题中需要包含
X-BOL-Date
X-BOL-Authorization
,请尝试以下修改

发件人: 致:
我不知道这是否有效,因为我无法运行它。因此,如果这不起作用,我很抱歉。

如果标题中需要包含
X-BOL-Date
X-BOL-Authorization
,请尝试以下修改

发件人: 致: 我不知道这是否有效,因为我无法运行它。如果这不起作用,我很抱歉

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,
};