Heroku APIと相互作用するChrome拡張機能に取り組んでいますが、(XHR)で行われたリクエストはとXMLHttpRequest同じように処理されないようcurlです。特に、基本認証はXHRでは使用されていないようですが、代わりにCookieが使用されています。
したがって、次を実行すると、次のようになります。
curl https://:yourapitokengoeshere@api.heroku.com/user -H "Accept: application/json"
問題なく適切な結果が得られます。
一方、拡張機能ページのChrome JavaScriptコンソールで次のコマンドを実行すると、リクエストが成功するかどうかは、Herokuにログインしているかどうかによって決まります。
var xhr = new XMLHttpRequest()
xhr.open("GET", "https://api.heroku.com/user", false, "", "yourapitokengoeshere")
xhr.setRequestHeader("Accept", "application/json")
xhr.send()
ログインすると、と同じ結果が得られcurlますxhr.responseText。ログアウトすると、が表示されますGET https://:yourapitokengoeshere@api.heroku.com/user 401 (Unauthorized)。ネットワークタブから、Cookieが渡され、Herokuは、渡されたパスワードとして渡されたAPIトークンではなく、それに基づいて応答していることがわかりますXMLHttpRequest::open。https://:yourapitokengoeshere@api.heroku.com/user(ユーザー名とパスワードのパラメーターを使用せずに開こうとしましたが、同じ結果になりました(予想どおりですが、試す価値があります))
あなたがそれを試してみたいのなら、私manifest.jsonは単に:
{
"name": "Testing Heroku.js",
"version": "0.1",
"background": {
"page": "test.html"
},
"permissions": [
"cookies",
"https://api.heroku.com/"
],
"manifest_version": 2
}
そして、test.htmlこれは単なる空のファイルなので、ビューを開いて検査し、拡張機能のコンテキストでコンソールにアクセスできます。これらの2つのファイルを任意の場所に作成し、それを囲むディレクトリを解凍された拡張子としてロードします。
だから私の質問は:それについて私ができることはありますか?私は何かが足りないのですか?Heroku APIに何か問題がありますか?またはXMLHttpRequest?APIの誤動作に傾倒しています…</p>
XMLHttpRequestより一般的には、通話と通話の違いを理解することに興味がありcurlます。
私の調査によると、 XMLHttpRequestCookieなしでは使用できないようで、ユーザーエージェントを変更してのように見せることはできませんcurl。また、curlを次のように動作させるためにいくつかのことを試みましたXMLHttpRequest(ユーザーエージェントを変更し、同じヘッダーを使用します)が、curl常に期待どおりに機能しました。
ありがとう!