我已经尝试了所有我能想到的组合来实现这个目标。我需要将什么作为POST字段发送到New以让它接受我的POST数据?
我的代码是:
function getFilterBy() {
var url = "https://basecamp.com/****/api/v1/projects/*****.json";
var payload = {"name" : "myapp", "description" : "no desc mls"};
var opt = {
"contentType" : "application/json",
"method" : "POST",
"headers":{ "User-Agent": "myapp (user@somewhere.com)",
"Authorization" :"Basic " + Utilities.base64Encode("user" + ":" + "pass")},
"validateHttpsCertificates" :false,
"muteHttpExceptions" : true,
"payload" : payload
};
var response = UrlFetchApp.fetch(url, opt);
var text = response.getContentText();
Logger.log(text);
}我的错误是:
lexical error: invalid char in json text.
description=no+desc+mls&name=Ho
(right here) ------^我试过Utilities.jsonStringify,但没有运气。我知道这是个错误,但我就是搞不懂。如果有一个地方,你知道我可以从哪里得到这个信息,那将是惊人的。
谢谢!
更新1
function getFilterBy() {
var url = "https://basecamp.com/****/api/v1/projects/****.json";
var payload = {name : 'myApp Change'};
var opt = {
"contentType" : "application/json",
"method" : "POST",
"headers":{ "User-Agent": "myApp (user@ex.com)",
"Authorization" :"Basic " + Utilities.base64Encode("user" + ":" + "pass")},
"validateHttpsCertificates" :false,
"muteHttpExceptions" : true,
"payload" : Utilities.jsonStringify(payload)
};
var response = UrlFetchApp.fetch(url, opt);
var text = response.getContentText();
Logger.log(text);
}产量Err:
<body>
<div class="dialog">
<div class="innercol">
<h1>Hmm, that isn’t right</h1>
<h2>You may have typed the URL incorrectly.</h2>
<p>Check to make sure you’ve got the spelling, capitalization, etc. exactly right.</p>
</div>
</div>
<p id="back" class="back">
<a href="javascript:window.history.back();">← Back to previous page</a>
</p>
<script type="text/javascript">
if (window.history.length <= 1) document.getElementById("back").style.display = "none";
</script>
</body>
发布于 2013-03-19 16:02:56
你确定你对JSON.stringify的尝试是正确的吗?这里的示例正确地在Basecamp中为我创建了一个项目,其项目名称/描述位于POST有效载荷中。
注意,我写这篇文章是为了不包括UserAgent --你会想把它放回去。
function createProject() {
var user = 'USERNAME';
var password = 'PASSWORD'
var accoundId = 'ACCOUNTID#';
var url = 'https://basecamp.com/'+accoundId+'/api/v1/projects.json';
var payload = {name : 'new project', description : 'my project description'};
var opt = {
contentType : 'application/json',
method : 'post',
headers:{Authorization :"Basic " + Utilities.base64Encode(user + ':' + password)},
validateHttpsCertificates :false,
muteHttpExceptions : true,
payload : JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(url, opt);
var text = response.getContentText();
Logger.log(text);
}为了更新项目,这里必须使用put动词而不是post作为记录在案。
这是一个工作样本-
function updateProject() {
var projectId = '2413370';
var url = 'https://basecamp.com/'+accoundId+'/api/v1/projects/'+projectId+'.json';
var payload = {name : 'new project', description : 'my new new project description'};
var opt = {
contentType : 'application/json',
method : 'put',
headers:{Authorization :"Basic " + Utilities.base64Encode(user + ':' + password)},
validateHttpsCertificates :false,
muteHttpExceptions : true,
payload : JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(url, opt);
var text = response.getContentText();
Logger.log(text);
}https://stackoverflow.com/questions/15502926
复制相似问题