2

此页面在纯空 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。没有任何效果。我不明白什么或我做错了什么?

这是显示终端错误的图像: 在此处输入图像描述

谢谢

4

1 回答 1

0

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

这个问题的原因是:(继承自模块)的auth选项通过在HTTP请求(文档)中添加标头来工作。这称为基本访问身份验证,许多服务器可能不支持。不幸的是,在当前的网络世界中,基本访问身份验证不再流行(它不安全),而且很可能不支持它。实际上,我在named中找到了一个 cookie,表明该站点正在使用 SessionId cookie 来验证用户身份。request-promiserequestAuthorizationemodal.comwww.emodal.comASP.NET_SessionId

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

于 2017-05-17T01:49:55.857 回答