2016-07-15 9 views
-1

ブラウザで動作するURLを使用してHTML GETリクエストを実行しようとしましたが、コードを実行すると何らかの原因で401 Unauthorizedエラーが発生します。問題は、私が認証を提供したことです。 URLは、それは(私もクッキーを避けるために、シークレットモードを経て)、FirefoxとChromeで成功するだけでなく、Googleのポストマンアプリが、しようと、いくつかの他のHTTP GETリクエストメソッドにもかかわらず、それらの形式ブラウザを除いて401が許可されていません

http://username:[email protected]?param=value

ですすべてが不正なエラーを返します。私はREST APIとXMLHttpRequest、そしてコマンドラインを通して実行しました。

これを引き起こす可能性のあるアイデアはありますか?または、誰かが同様の問題を抱えていて、解決策がある場合は、さらに良いでしょうか?

(注意:私は、誰もが必要な場合は手の込んだために最善を尽くします、私は十分に詳細な/クリアした場合は必ず、この全体のことにはかなり新しいものではありませんよ)

編集:ここではいくつかのアイデアがあります私が実行していた元のコード:

var func = function() { 
    var options = { 
    baseUrl: SERVER, 
    uri: '/device.cgi', 
    qs: { 
     param1: value1, 
     param2: value2 
    } 
    }; 
    request(options, function(err, response, body) { 
    if (err) console.log(err); 
    else console.log(body); 
    }); 
}; 

私もthis questionから

function httpGet(theUrl) 
{ 
    var xmlHttp = new XMLHttpRequest(); 
    xmlHttp.open("GET", theUrl, false); // false for synchronous request 
    xmlHttp.send(null); 
    return xmlHttp.responseText; 
} 

を実行し、同じ不正な結果を得ました。

そしてどうやら私が使用しているデバイスは、同様にPOSTで結構ですので、

var func = function() { 
    var formData = { 
    form: { 
     param1: value1, 
     param2: value2 
    } 
    }; 
    request.post(SERVER + 'device.cgi', formData, function (err, response, body) { 
    if (err) { 
     console.log(err); 
    } 
    else console.log(body); 
    }).auth(userID, userPass); 
}; 

まだまったく同じ結果に。

+0

あなたがブラウザであり、ノードではないことを偽装する必要がありますか? URLの代わりにヘッダーを設定しようとしましたか? – epascarello

+0

どのメソッドが失敗しますか? Curlは機能しますか?動作していないコードの部分を共有できますか? –

+0

あなたがnodejsコードを投稿した場合、私たちはより良い助けをすることができます。要するに、ブラウザがあなたのための認証ヘッダーを作成しています。 – Alan

答えて

1

http://username:[email protected]?param=value

ブラウザはそのURLを取り、そしてあなたのための基本的なHTTP Authorizationヘッダーを作成しています。

Node.jsはそれをおこないません。したがって、Authorizationヘッダーを自分でコードに設定する必要があります。

var http = require('http'); 

var options = { 
    host: 'www.tempuri.org', 
    path: '/helloworld/', 
    headers: { 
    'Authorization': 'Basic QWxhZGRpbjpPcGVuU2VzYW1l' 
    } 
}; 

http.request(options, function(response) { 
    var body = ''; 
    response.on('data',function(c) { 
    body+= c; 
    }) 
    response.on('end',function() { 
    console.log(body) 
    }) 
}).end(); 

次のリンクは、ブラウザがURL内のデータをエンコードする方法、基本的な認証を議論し、あなたはNode.jsの中でそれを自分で実装する方法:

+0

これらのリンクに加えて基本的な例を提供できますか?この答えが生きている間にリンクが消滅した場合、これは後世の人にとっては良いことです。 – gfullam

+0

Understoop。私は、OPがサンプルコードを貼り付けて修正することを望んでいます。どのnodejsライブラリやモジュールを使用しているかわからないと、サンプルコードはあまり役に立たないかもしれません。 – Alan

+0

申し訳ありませんが、元の質問ではおそらく十分ではありませんでした。私はこの方法で認証を処理しようとしましたが、それでも私には同じエラーが表示されます。この問題は以前のデバイスで経験したことがないことを考慮すると、おそらくコードの問題ではなく、デバイスの問題です。 – Edylk

関連する問題