未处理的拒绝错误:StatusCodeError:401(未授权:由于凭据无效而拒绝访问)

时间:2017-05-16 23:21:17

标签: javascript http authentication request request-promise

此页面在普通的空html / body标签内显示JSON。例如:

<html>
  <body>
    **JSON DATA ***
  </body>
</html>

我可以在浏览器中正常访问该页面。但是,当我发送请求时,它表示我的凭据无效(响应错误几乎在标题中)。 这是代码

import dotenv = require('dotenv');
dotenv.config({ path: '../logins.env' });
import rp = require('request-promise');
const jsonUrl = `http://availability.emodal.com/ImportAvailability/GetContainerInfoList?sgrdModel=%7B%22searchtext%22:%22%22,%22page%22:1,%22pageSize%22:280,%22sortBy%22:%221%22,%22sortDirection%22:%22asc%22,%22sortColumns%22:%22%22%7D`;

const authOpts = {
  uri: jsonUrl,
  auth: {
    user: process.env.EMODAL_id,
    pass: process.env.EMODAL_pw,
    sendImmediately: false
  },
  method: 'get'
}

rp(authOpts)
.then(resp => {
  console.log(resp);
}).catch(err => { throw Error(err)});

我尝试改变一切。就像添加标题,或者将json:设置为true,或者将sendImmediately更改为true一样。什么都行不通。我不理解什么或我做错了什么?

这是显示终端错误的图像: enter image description here

谢谢

1 个答案:

答案 0 :(得分:0)

根据我的理解,问题是:登录后URL的页面可以成功显示,但URL本身不能直接由程序提取。

此问题的原因是:auth request-promise选项(继承自模块request)的工作方式是在HTTP请求中添加Authorization标头(document )。这称为Basic access authentication,许多服务器可能不支持。不幸的是,在当前的网络世界中,基本访问身份验证不再受欢迎(它不安全),emodal.com很可能不支持它。实际上,我在名为www.emodal.com的{​​{1}}中找到了一个cookie,表示该网站正在使用SessionId cookie对用户进行身份验证。

要解决此问题,我认为该程序需要登录并在登录成功后保存SessionId cookie。然后,通过在HTTP请求标头中添加SessionId cookie来获取URL资源。