【问题标题】:Call parse.com job from javascript using REST API使用 REST API 从 javascript 调用 parse.com 作业
【发布时间】:2015-02-22 00:22:00
【问题描述】:

正如标题所说,我正在尝试使用 REST API 从 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"}

【问题讨论】:

  • 您可以尝试通过 Runscope 转发您的请求,然后对 cUrl 执行相同的操作,然后使用 Runscope 进行并排比较,以尝试找出它在您的 Android 应用中不起作用的原因。
  • 客户端可以添加其他默认标题。您将需要打开日志记录(Wire & headers)或查看服务器日志以确切了解正在发送的内容。与 curl 相同的标头 n 线,您将获得相同的结果
  • 我添加了对问题的请求和响应。我使用 Fiddler 来实现这一点 - 似乎比 Runscope 更简单。但是,当我使用 cURL(或 ping)时,Fiddler 没有显示任何内容,所以我不确定有什么区别。我已经在 Windows 7 上安装了 cURL 客户端——知道为什么 Fiddler 不会向我显示该流量吗?经过一番搜索,我没有找到任何答案,但我会继续寻找。

标签: android rest parse-platform appcelerator


【解决方案1】:

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

https://parse.com/docs/rest#backgroundjobs

【讨论】:

  • 很好,但我将其更改为使用主密钥设置标题“X-Parse-Master-Key”,但仍然得到“错误请求”。请注意,当我得到“未授权”时,这与不设置身份验证标头不同。所以它似乎不是拒绝凭据不正确,而是说存在格式错误。
  • 嗯,您是否尝试过直接通过 REST-API 开始工作(使用 curl)。从您发布的内容来看,没有数据发送到 API(内容长度:0),也许那里有什么?如果您可以共享该作业的代码(只需删除所有机密部分),我可以在我的一个应用程序中对其进行设置以进行调试。
  • 从 cURL 可以正常工作。我注意到内容长度也为 0,并且也没有用户代理,但我不知道其中是否有问题。我不认为这份工作真正重要——它甚至没有被运行。问题在于从这个移动应用程序获得正确的请求。如果您碰巧熟悉 Appcelerator,那么从那里调用解析作业可能会有所帮助。但我认为 parse.com 和 Appcelerator 之间没有太多交叉。顺便说一句,我还试图直接调用 mailgun 来发送电子邮件,这给了我同样的错误。有什么线索吗?
  • 我对此感到困惑的一件事是我无法捕获 cURL 流量。我试过 Fiddler、Charles 和 MS 消息分析器,当我运行 cURL 命令时,我在流量分析器中看不到 parse.com 的任何内容。
猜你喜欢
  • 2020-07-02
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
相关资源
最近更新 更多