2017-05-16 80 views
0

此頁面顯示純html/body標籤內部的JSON。例如:未處理的拒絕錯誤:StatusCodeError:401(未授權:由於憑據無效而導致訪問被拒絕)

<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

從我的理解,這個問題是:URL頁面可以成功登錄後顯示出來,但是網址本身不能被程序直接提取。

這個問題的原因是:的request-promiseauth選項後,通過HTTP請求(document)加入Authorization頭的工作原理(從模塊request繼承)。這被稱爲Basic access authentication,可能不被許多服務器支持。不幸的是,在當前的網絡世界中,基本訪問驗證不再受歡迎(它不安全),並且很有可能emodal.com不支持它。實際上,我在www.emodal.com中找到一個名爲ASP.NET_SessionId的cookie,它表示該站點正在使用SessionId cookie來驗證用戶身份。

爲了解決這個問題,我覺得程序需要登錄,登錄成功後保存SessionId的cookie。然後,通過在HTTP請求標頭中添加SessionId cookie來獲取URL資源。

相關問題