Google App Script 静静地无法 POST,Curl 有效
Google App Script Silently fails to POST, Curl Works
Curl 正在 posting 但 GoogleAppScript 没有相同的凭据。
我正在尝试将 google 应用程序脚本 post 当前文档作为 html 新 Jive 文档的内容
// 下面的 curl 命令完美运行
curl -u USERNAMEHERE:PASSWORDHERE -H "Content-Type: application/json" --data '{ "type": "document", "content": { "type": "text/html", "text":"<h1>HOORAY</h1> a Document is born"}, "subject": "TEST WORKED"}' https://MYJIVEURL.com/api/core/v3/places/XXXXXXXX/contents
// Apps 脚本现在抛出 401 错误
function pleaseWork() {
var encode = Utilities.base64Encode('USER:PASS', Utilities.Charset.UTF_8);
var docbody = DocumentApp.getActiveDocument().getBody();
var subject = DocumentApp.getActiveDocument().getName();
var url = "https://JIVEURL/api/core/v3/places/XXXXXX/contents";
var option = {
authorization: "Basic " + encode,
contentType: "application/json",
method: 'post',
payload: JSON.stringify({
subject: subject,
type: "document",
content: {
type: 'text/html',
text: docbody
},
})
}
var response = UrlFetchApp.fetch(url, option).getContentText()
}```
Theres no other errors to speak of in the AppScript editor. So I must be leaving something out. I just don't know what that is
第 1 部分 - payload
params
对象有一个名为 "payload" 的参数,它应该包含您要作为字符串化 JSON 发送的数据。因此,不是直接引用 content
、subject
和 type
,您应该执行以下操作(顺便说一句,UrlFEtchApp
的内容类型可以通过 contentType
参数和method
通过相应的参数):
var option = {
//other parameters here;
method : 'post',
contentType : 'application/json',
payload : JSON.stringify( {
content : '',
subject : '',
type : ''
} )
}
第 2 部分 - headers
虽然这看起来很武断,但并非所有 参数都应移至params
对象的top-level 属性。可以通过这种方式设置一组封闭的属性(请参阅参考资料)。授权仍应设置为 header
,因此:
var option = {
//other parameters here;
headers : {
Authorization : 'Basic ' + yourAuth
},
method : 'post',
contentType : 'application/json',
payload : JSON.stringify( {
content : '',
subject : '',
type : ''
} )
}
有用链接
UrlFetchApp.fetch()
reference;
Curl 正在 posting 但 GoogleAppScript 没有相同的凭据。
我正在尝试将 google 应用程序脚本 post 当前文档作为 html 新 Jive 文档的内容
// 下面的 curl 命令完美运行
curl -u USERNAMEHERE:PASSWORDHERE -H "Content-Type: application/json" --data '{ "type": "document", "content": { "type": "text/html", "text":"<h1>HOORAY</h1> a Document is born"}, "subject": "TEST WORKED"}' https://MYJIVEURL.com/api/core/v3/places/XXXXXXXX/contents
// Apps 脚本现在抛出 401 错误
function pleaseWork() {
var encode = Utilities.base64Encode('USER:PASS', Utilities.Charset.UTF_8);
var docbody = DocumentApp.getActiveDocument().getBody();
var subject = DocumentApp.getActiveDocument().getName();
var url = "https://JIVEURL/api/core/v3/places/XXXXXX/contents";
var option = {
authorization: "Basic " + encode,
contentType: "application/json",
method: 'post',
payload: JSON.stringify({
subject: subject,
type: "document",
content: {
type: 'text/html',
text: docbody
},
})
}
var response = UrlFetchApp.fetch(url, option).getContentText()
}```
Theres no other errors to speak of in the AppScript editor. So I must be leaving something out. I just don't know what that is
第 1 部分 - payload
params
对象有一个名为 "payload" 的参数,它应该包含您要作为字符串化 JSON 发送的数据。因此,不是直接引用 content
、subject
和 type
,您应该执行以下操作(顺便说一句,UrlFEtchApp
的内容类型可以通过 contentType
参数和method
通过相应的参数):
var option = {
//other parameters here;
method : 'post',
contentType : 'application/json',
payload : JSON.stringify( {
content : '',
subject : '',
type : ''
} )
}
第 2 部分 - headers
虽然这看起来很武断,但并非所有 参数都应移至params
对象的top-level 属性。可以通过这种方式设置一组封闭的属性(请参阅参考资料)。授权仍应设置为 header
,因此:
var option = {
//other parameters here;
headers : {
Authorization : 'Basic ' + yourAuth
},
method : 'post',
contentType : 'application/json',
payload : JSON.stringify( {
content : '',
subject : '',
type : ''
} )
}
有用链接
UrlFetchApp.fetch()
reference;