【问题标题】:failed to access Nest from Javascript [duplicate]无法从 Javascript 访问 Nest [重复]
【发布时间】:2016-01-10 14:49:30
【问题描述】:

我正在尝试在 android 本机应用程序 (java) 中使用 javascript (以与之前相同的方式/并且它正在工作) 实现对我的 Nest 帐户的访问,我们成功访问了 Nest帐户如下:

final String BASE_URL =
        "https://home.nest.com/user/login?";
final String USERNAME_PARAM = "username";
final String PASSWORD_PARAM = "password";

Uri builtUri = Uri.parse(BASE_URL).buildUpon()
        .appendQueryParameter(USERNAME_PARAM, mEmail)
        .appendQueryParameter(PASSWORD_PARAM, mPassword)
        .build();

URL url = new URL(builtUri.toString());

// Create the request, and open the connection
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setRequestProperty("http.agent", "Nest/1.1.0.10 CFNetwork/548.0.4");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConnection.connect();

// Read the input stream into a String
InputStream inputStream = urlConnection.getInputStream();

但是当我尝试在 Javascript 中执行相同操作时,我收到以下错误:

XMLHttpRequest 无法加载 https://home.nest.com/user/login?username=myemail@domain.com&password=XXXX。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此,Origin 'domain.com' 不允许访问。这 响应的 HTTP 状态代码为 401。

我的 Javascript:

var BASE_URL = "https://home.nest.com/user/login?";
var USERNAME_PARAM = "username";
var PASSWORD_PARAM = "password";

var url = BASE_URL +  USERNAME_PARAM + "=" + mEmail
    + "&" + PASSWORD_PARAM + "=" + mPassword; // pass in a URI as a string and parse that 


$.ajax({
    headers: { "http.agent": "Nest/1.1.0.10 CFNetwork/548.0.4" },
    type: "POST",
    url: url,
    contentType: "application/x-www-form-urlencoded",
    dataType: "json",
    success: function (response) {
        console.log("Success:" + JSON.stringify(response));           
    },
    error: function (response) {
        console.error("Error:" + JSON.stringify(response));
    }
});

知道有什么问题吗?为什么它可以在 java 中工作,我也尝试使用 Postman - REST 客户端扩展,它工作完美!!!

谢谢, 约瑟夫

【问题讨论】:

    标签: javascript ajax httprequest nest


    【解决方案1】:

    CORS。看看你问题的黄色部分......你的请求没有通过跨站点脚本检查,这意味着你不能使用 AJAX 进行这个调用,你可以使用 JSONP 吗?顺便说一句,JSONP 只能由 GET 使用。

    如果需要,解决方案是实现代理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      • 2012-04-04
      • 2012-10-09
      • 2013-01-11
      • 2015-11-15
      • 1970-01-01
      相关资源
      最近更新 更多