2017-05-16 9 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に変更するなど。何も動作しません。私は何を理解していないのですか、何が間違っていますか?ここで

は、端末にエラーを示す画像である:URLのページには、ログインした後、正常に表示することができますが、URL自体: enter image description here

が私の理解から、あなた

+1

'ここには、端末のエラーを示す画像があります。 ' - テキストをコピーして貼り付けると、テキストはもっと素早く*扱いやすくなります –

答えて

0

ありがとう、問題がありますプログラムによって直接フェッチすることはできません。

、この問題の原因は次のとおりです。(モジュールrequestから継承)request-promiseauthオプションは、HTTPリクエスト(document)でAuthorizationヘッダを追加することによって動作します。これはBasic access authenticationと呼ばれ、多くのサーバーでサポートされていない可能性があります。残念ながら、現在のウェブ世界では、基本アクセス認証はそれ以上(それは安全ではない)人気がなく、emodal.comはそれをサポートしていない可能性が非常に高いです。実際には、ASP.NET_SessionIdという名前のクッキーがwww.emodal.comであり、サイトがSessionId Cookieを使用してユーザーを認証していることを示しています。

この問題を解決するには、ログインにログインし、正常にログインした後にセッションIDクッキーを保存する必要があると私は思っています。次に、HTTP要求ヘッダーにSessionId Cookieを追加してURLリソースを取得します。

関連する問題