【问题标题】:Response <403> Despite Correct Authorization in nodejs响应 <403> 尽管 nodejs 中的授权正确
【发布时间】:2021-01-22 19:28:23
【问题描述】:

我正在尝试向 URL 发送一个发布请求,我在 python 中使用以下代码执行此操作,它的工作原理非常棒,我得到了一个 [响应 ],但因为我需要在网站,我切换到 JS 并尝试重新创建相同的功能,但由于某种原因,我得到了 [Response ] 即使我所有的身份验证令牌和标头,一切都与 python 代码相同。

Python 代码 -

    url = "https://discord.com/api/v8/channels/801784356711956522/messages"
    auth = ""
    headers = {"Authorization": auth,
               'Content-Type': 'application/json', 'referer': "https://discord.com/channels/801784356217421874/801784356711956522"}
    payload = {'content': 'Test' , 'nounce': 802056256326991872, 'tts': False}
    response = requests.post(url, data=json.dumps(payload), headers=headers)
    print(response)

JavaScript 代码 -

onst url = "https://discord.com/api/v8/channels/801784356711956522/messages"
const auth = ""
const headers = {"Authorization": auth,
                 'Content-Type': 'application/json', 
                 'referer': "https://discord.com/channels/801784356217421874/801784356711956522"}

const options = {
    headers : headers, 
}                

const data = JSON.stringify({'content':"Test" , 'nounce': 802056256326991872, 'tts': false})

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;

const req = https.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`)

  res.on('data', (d) => {
    process.stdout.write(d)
  })
})

req.on('error', (error) => {
  console.error(error)
})

req.write(data)
req.end()

【问题讨论】:

    标签: javascript python node.js httpresponse http-status-code-403


    【解决方案1】:

    在您的 python 代码中,您发出了 POST 请求,但在 JavaScript 代码中,您发出了 GET 请求,因为您没有提供方法选项。

    https.request选项文档中指定:

    method 指定 HTTP 请求方法的字符串。默认: '得到'。

    像这样修改 POST 请求

    const options = {
        headers : headers,
        method: "POST"
    }                
    

    另外,由于您没有在选项中提供主机名和路径,因此您需要添加 URL。

    const req = https.request(url, options, (res) => {
      // ...
    })
    

    【讨论】:

    • 好吧,出于某种原因,这给了我一个状态码 400,我不明白这是因为它在 python 中工作得很好,而且我基本上发布了相同的请求
    • 我意识到您没有为您的请求提供 URL 参数。 https.request(url, options, (res) =&gt; {你可以这样试试吗?
    • 哇,我没注意到,谢谢!它现在工作。您可以更新您的答案以将其也包含在 method: "POST" 中,以便我将其标记为正确
    【解决方案2】:
    const querystring = require('querystring');
    const https = require('https');
    
    var postData = querystring.stringify({
        'msg' : 'Hello World!'
    });
    
    var options = {
      hostname: 'domain.com',
      port: 443,
      path: '/yow-path',
      method: 'POST',
      headers: {
           'Content-Type': 'application/x-www-form-urlencoded',
           'Content-Length': postData.length
         }
    };
    
    var req = https.request(options, (res) => {
      console.log('statusCode:', res.statusCode);
      console.log('headers:', res.headers);
    
      res.on('data', (d) => {
        process.stdout.write(d);
      });
    });
    
    req.on('error', (e) => {
      console.error(e);
    });
    
    req.write(postData);
    req.end();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      • 2020-12-17
      • 2018-05-27
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2015-12-15
      相关资源
      最近更新 更多