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
ます。
私の調査によると、 XMLHttpRequest
Cookieなしでは使用できないようで、ユーザーエージェントを変更してのように見せることはできませんcurl
。また、curlを次のように動作させるためにいくつかのことを試みましたXMLHttpRequest
(ユーザーエージェントを変更し、同じヘッダーを使用します)が、curl
常に期待どおりに機能しました。
ありがとう!