如何使用axios将数据发送到行通知

时间:2019-03-29 15:20:44

标签: api vue.js line

我试图通过axios将数据发送到行通知服务器,但失败

我尝试了2个版本的代码。如下图所示

版本1:

axios({
        method: "post",
        url: "https://notify-api.line.me/api/notify",
        data: 'message="from vue"',
        config: {
          headers: {
            "Access-Control-Allow-Origin": "*",
            "Content-Type": "multipart/form-data"
          }
        },
        Authorization: "Bearer [my token]"
      })
        .then(function(response) {
          console.log(response);
        })
        .catch(function(response) {
          console.log(response);
        });

响应为


XMLHttpRequest cannot load https://notify-api.line.me/api/notify due to access control checks.
Error: Network Error

第2版是:

axios
        .post("https://notify-api.line.me/api/notify", "message=from vue", {
          headers: {
            "Content-Type": "application/x-www-form-urlencoded",
            Authorization: "Bearer [my token]"
          }
        })
        .then(response => {
          console.log(response);
        });

响应为

Preflight response is not successful
XMLHttpRequest cannot load https://notify-api.line.me/api/notify due to access control checks.
Error: Network Error

出什么问题了

但是我在邮递员中尝试过,效果很好

4 个答案:

答案 0 :(得分:0)

哦,我对此太熟悉了。 Heres an explanation on stackoverflow关于您的请求为何适用于邮递员但无法在浏览器中使用的问题。长话短说的浏览器发送预检options检查,该检查将询问服务器是否允许您要执行的操作。邮递员没有。通常"Access-Control-Allow-Origin": "*"标头是由服务器发送到浏览器的,而不是相反的方式。

docs for LINE Notify内,您可以找到:

POST https://notify-api.line.me/api/notify
Sends notifications to users or groups that are related to an access token.

If this API receives a status code 401 when called, the access token will be deactivated on LINE Notify (disabled by the user in most cases). Connected services will also delete the connection information.

Requests use POST method with application/x-www-form-urlencoded (Identical to the default HTML form transfer type).

我的猜测是您的access_token可能已被停用。尝试要求一个新的访问令牌,然后再次执行请求。

答案 1 :(得分:0)

我认为不可能直接连接到外部URL,因为axios cuz ajax基本上是用于内部数据网络的。但是,如果您执行Web项目,则可能会有一个控制器,因此您可以仅使用控制器语言与线路通知建立连接。就我而言,我创建了一个rails项目,并在vue.js中使用了axios,因此我做了这样的链接。

View(axios)=>控制器(Ruby)=> LineAPI

答案 2 :(得分:0)

我目前也正在为此工作。

我用node js做我的应用。

下面我的方式供您参考,效果很好。

const axios = require('axios');
const querystring = require('querystring');

axios({
    method: 'post',
    url: 'https://notify-api.line.me/api/notify',
    headers: {
      'Authorization': 'Bearer ' + 'YOUR_ACCESS_TOKEN',
      'Content-Type': 'application/x-www-form-urlencoded',
      'Access-Control-Allow-Origin': '*'
    },
    data: querystring.stringify({
      message: 'something you would like to push',
    })
  })
.then( function(res) {
  console.log(res.data);
})
.catch( function(err) {
  console.error(err);
});

答案 3 :(得分:0)

我尝试它。

async function test() {
  const result = await axios({
    method: "post",
    url: "https://notify-api.line.me/api/notify",
    headers: {
      "Content-Type": "application/x-www-form-urlencoded",
      "Authorization": "Bearer [token]",

    },
    data: 'message=你好哇'
  })
    .then((response) => {
      console.log(response);
    })
    .catch((err) => {
      console.log(err);
    });
}

test();

我认为您可以检查chrome调试器网络上的响应。

enter image description here

或提供更多信息。