[UPDATE] 问题已解决。下面更新了工作代码和方法!
所以,我试图使用AS3中的SoundCloud api向SoundCloud轨道发布评论。 文档可以在这里找到:
http://developers.soundcloud.com/docs/#comments
我的代码如下:
var urlLoader:URLLoader = new URLLoader();
var urlString:String = "https://api.soundcloud.com/tracks/" + soundModel.currentlyPlayingItem.id + "/comments.json" + "?comment[body]=" + commentString + "&comment[timestamp]=" + trackPositionComment;
var urlRequest:URLRequest = new URLRequest(urlString);
urlRequest.method = URLRequestMethod.POST;
var variables:URLVariables = new URLVariables();
variables.oauth_token = soundModel.userToken; //here is the filler variable to make POST, not GET.
urlRequest.data = variables;
urlRequest.contentType = "application/x-www-form-urlencoded";
var header2:URLRequestHeader=new URLRequestHeader("oauth_token",soundModel.userToken);
var header3:URLRequestHeader=new URLRequestHeader("client_id", "sdjhb4jhbkjbe4gkjbh4random");
urlRequest.requestHeaders.push(header2);
urlRequest.requestHeaders.push(header3);
urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, commentPosted);
urlLoader.load(urlRequest);
最初我一直得到401 - 未经授权的错误。
在使用SoundCloud API控制台后,我看到有一个内容长度' 0,意思是没有身体。所以所有的身份验证都必须在头文件中,而不是变量。但是,使用AS3 UrlLoader中的POST方法,如果没有包含正文(变量),它将自动发送为GET。因此,我留下了一个任意的变量值。
这两个参数,' body'和'时间戳'确实必须发送评论[正文]'和'评论[时间戳]'即使文档中没有明确说明这一点。此外,这两个参数都必须包含在URL中,而不是作为变量或标题。
最后,要获得授权退货,您必须同时提供您的' client_id'和' oauth_token'作为标题。
正是这种神奇的组合为我做到了。我希望这可以帮助其他人,准备像我一样撕掉他们的头发。
THX, Theo M。