gpt4 book ai didi

JavaScript 松弛 API jquery

转载 作者:行者123 更新时间:2023-11-29 23:19:26 27 4
gpt4 key购买 nike

我的问题很简单,我认为创建这个程序只需要几个小时。但是现在我整天都在研究它,试图弄清楚我可能做错了什么。

我想做的就是使用他们的 postMessage api 将消息发布到 slack .我已经能够使用休闲裤成功发送消息 testing methods .

这是测试输出的url

https://slack.com/api/chat.postMessage?token=xoxp-xxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxxxxx&channel=XXXXXXXX&text=Just%20need%20the%20url&as_user=jheuman&pretty=1

然后我决定使用我的文件系统提供的这个 html 文件在本地尝试一下

<!DOCTYPE html>
<html>
<head>
<title>Testing Slack API</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<button onClick="test()">Test</button>
<button onClick="test2()">Authorization Test</button>

<script>
function test() {
var apiUrl = "https://slack.com/api/chat.postMessage";
var token = "xoxp-xxxxx...";//my token has been omitted for security;
var channel = "#general";
var text = "Testing slack api";
var user = "jheuman";
var actualToken = "Bearer " + token;


$.ajax({
headers: {
'Authorization':actualToken,
'Content-Type':'application/json'
},

data: JSON.stringify({
"channel": channel,
"text": text,
"as_user": user
}),
dataType: 'json',
processData: false,
type: 'POST',
url: apiUrl
})
.done(function(data) {
console.log(JSON.stringify(data));
})
.fail(function(response) {
console.log(JSON.stringify(response));
});


};

function test2() {
var apiUrl = "https://slack.com/api/auth.test";
var token = "xoxp-xxxxx..."; //my token has been omitted for security
var channel = "#general";
var text = "Testing slack api";
var user = "jheuman";
var actualToken = "Bearer" + token;


$.ajax({
headers: {
'Authorization':actualToken
},
type: 'POST',
url: apiUrl,
})
.done(function(data) {
console.log(JSON.stringify(data));
})
.fail(function(response) {
console.log(JSON.stringify(response));
});


};
</script>

但是当我点击任一按钮时,出现以下错误:

Failed to load https://slack.com/api/chat.postMessage: Request header field 
Authorization is not allowed by Access-Control-Allow-Headers in preflight
response.

所以根据 friend 的建议,我在服务器上试了一下。我用了Web Server For Chrome在端口 8887 上提供服务。首先不设置 cors header ,然后设置 cors header 。两者都无济于事。我收到了同样的错误。

如您所见,我也尝试了 auth.test 调用,但我收到了同样的错误。

Slack 特别声明他们更喜欢授权 header ,并且 api 可以处理 json 数据。

我尝试过的其他事情:

数据中没有带标记的头字段:

data: JSON.stringify({
'token':actualToken,
'channel': channel,
'text': text,
'as_user': user
}),
dataType: 'json',
processData: false,
type: 'POST',
url: apiUrl

收到的错误:

{"ok":false,"error":"invalid_form_data"}

没有'Bearer'的数据中没有带 token 的头字段:

data: JSON.stringify({
'token':token,
'channel': channel,
'text': text,
'as_user': user
}),
dataType: 'json',
processData: false,
type: 'POST',
url: apiUrl

收到的错误:

{"ok":false,"error":"invalid_form_data"}

我调查过但认为不会影响结果的事情

The type of token

那么我如何让这个发帖请求起作用呢?

我不打算使用 jquery 或 ajax,这正是我过去使用的,所以如果您有不同的请求库要使用,我洗耳恭听。

如果你需要更多信息,我会尽量给你

最佳答案

由于正确配置 CORS 以发送内容类型为 application/json 的数据可能很棘手,我建议将请求发送为 application/x-www-form-urlencoded 这是 AJAX 的默认值。

例子:

var apiUrl = "https://slack.com/api/chat.postMessage";
var token = MY_TOKEN;
var channel = "general";
var text = "Testing slack api";
var user = "jheuman";

$.ajax({
data: {
"token": token,
"channel": channel,
"text": text,
"as_user": user
},
dataType: 'text',
type: 'POST',
url: apiUrl,
error: function(xhr,status,error){
console.log("error: " + error);
},
success: function(data) {
console.log("result: " + data);
}
});

如果出现 CORS 错误,可以添加 crossDomain: true

此解决方案已经过测试,可以在普通浏览器中运行。

关于JavaScript 松弛 API jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51315868/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com