Android 使用REST API从javascript调用parse.com作业

Android 使用REST API从javascript调用parse.com作业,android,rest,parse-platform,appcelerator,Android,Rest,Parse Platform,Appcelerator,正如标题所说,我正试图使用RESTAPI从javascript(特别是Appcelerator Android应用程序)在parse.com上运行一个作业。我使用REST是因为这只是为了诊断,我不想尝试让parse.com javascript API在Appcelerator中工作。问题是我无法获得身份验证。如果我没有传递身份验证头,我会得到相应的401身份验证错误,但是如果我设置了它们,我会得到“坏请求”。我通过cURL实现了它的工作,因此URL是正确的,parse按照预期响应调用。这是我的

正如标题所说,我正试图使用RESTAPI从javascript(特别是Appcelerator Android应用程序)在parse.com上运行一个作业。我使用REST是因为这只是为了诊断,我不想尝试让parse.com javascript API在Appcelerator中工作。问题是我无法获得身份验证。如果我没有传递身份验证头,我会得到相应的401身份验证错误,但是如果我设置了它们,我会得到“坏请求”。我通过cURL实现了它的工作,因此URL是正确的,parse按照预期响应调用。这是我的密码:

var url = "https://api.parse.com/1/jobs/sendMail";

    var client = Ti.Network.createHTTPClient({
         // function called when the response data is available
         onload : function(e) {
             Ti.API.info("Received text: " + this.responseText);
             alert("Received text: " + this.responseText);
         },
         // function called when an error occurs, including a timeout
         onerror : function(e) {
             Ti.API.debug(e.error);
             alert(e.error);
         },
         timeout : 5000  // in milliseconds
     });

     var param = {"text":msg};

     // Prepare the connection.
     var auth = {"app":"sTnsthoeunotreallymyappIDbutabunchofcharactersESnecu","key":"8ll5thisisntreallymykeyeitherhMKqkYG"};
     client.open("POST", url);

     client.setRequestHeader("X-Parse-Application-Id",auth.app);
     client.setRequestHeader("X-Parse-REST-API-Key",auth.key);

     client.setRequestHeader("Content-Type","application/json");

     // Send the request.
     client.send(param);
以下是请求和响应:

POST https://api.parse.com/1/jobs/sendMail HTTP/1.1
X-Parse-Application-Id: myappid
User-Agent: 
X-Parse-REST-API-Key: myrestapikey
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Content-Length: 0
Host: api.parse.com
Connection: Keep-Alive

HTTP/1.1 401 Unauthorized
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Content-Type: application/json; charset=utf-8
Date: Sun, 22 Feb 2015 04:36:11 GMT
Server: nginx/1.6.0
Set-Cookie: _parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlMTY4MzY0NTZlOWQ3ZGRjZDJkOWQwMjA4MWZjNWViMTY%3D--ffc760efbe32aa80a5e6d369606361413433fa72; domain=.parse.com; path=/; expires=Tue, 24-Mar-2015 04:36:11 GMT; secure; HttpOnly
Status: 401 Unauthorized
WWW-Authenticate: Basic realm="Parse"
X-Content-Type-Options: nosniff
X-Runtime: 0.018320
X-UA-Compatible: IE=Edge,chrome=1
Content-Length: 24
Connection: keep-alive

{"error":"unauthorized"}

通过REST-API触发后台作业需要使用主密钥,而不是REST-API密钥


您可以尝试通过Runscope中继请求,然后对cUrl执行相同的操作,然后使用Runscope进行并排比较,以尝试确定为什么它在您的Android应用程序中不起作用。客户端可能会添加其他默认标题。您需要打开日志记录(Wire&Header)或查看服务器日志以查看发送的内容。与curl相同的标题n wire,您将得到相同的结果我添加了对问题的请求和响应。我用Fiddler得到的-似乎比Runscope简单。然而,当我使用cURL(或ping)Fiddler时,它不会显示任何内容,所以我不确定它们的区别是什么。我已经在Windows7上安装了cURL客户端——你知道Fiddler为什么不向我展示这个流量吗?经过一点搜索,我还没有找到任何答案,但我会继续查找。捕捉得很好,但我将其更改为使用主密钥设置标题“X-Parse-Master-Key”,但仍然得到“坏请求”。请注意,这与设置“未经授权”时没有身份验证头不同。因此,它似乎不是因为不正确而拒绝凭据,而是说存在一些格式错误。嗯,您是否尝试过直接通过REST-API(使用curl)启动作业。从您发布的内容来看,没有数据发送到API(内容长度:0),可能是上面有什么?如果你可以共享作业的代码(只需删除所有机密部分),我可以在我的一个应用程序中设置它来调试它。我注意到内容长度也为0,而且也没有用户代理,但我不知道这两者是否都有问题。我认为这项工作做什么并不重要——它甚至都不是在运行。问题在于从该移动应用程序获取正确的请求。如果您碰巧熟悉Appcelerator,那么从那里调用解析作业可能会有所帮助。但我认为parse.com和Appcelerator之间没有太多的交叉。顺便说一句,我还试图直接打电话给mailgun发送电子邮件,这给了我同样的错误。有什么线索吗?有一件事让我很困惑,那就是我无法捕捉到cURL的流量。我试过Fiddler、Charles和MS Message Analyzer,当我运行cURL命令时,我在流量分析器中看不到parse.com。