2015-09-29 10 views
6

この2つのリクエストを送信しようとしましたが、タイトルに記載されているエラーのみが返答として受け取ります。 Googleのサーバーへの私の2 webrequestsはこのようなものです:HTTPリクエストステータスコード405 ReasonPhrase: '' Youtube APi

HttpClient http = new HttpClient(); 

HttpResponseMessage response = await http.GetAsync("https://accounts.google.com/o/oauth2/token?code="+localSettings.Values["AccessKey"]+"&client_id=XX-XXXXXXXXXX.apps.googleusercontent.com&client_secret=XXXXX-XXXX&redirect_uri=http://localhost/oauth2callback&grant_type=authorization_code"); 

//response.EnsureSuccessStatusCode(); 
Debug.WriteLine(response.ToString()); 
HttpResponseMessage response1 = await http.GetAsync("https://content.googleapis.com/youtube/v3/subscriptions?part=id&maxResults=10&mine=true&key="+localSettings.Values["AccessKey"]); 
Debug.WriteLine(response1.ToString()); 

私はデバッガから次のような出力を得る:あなたはlocalSettings.Values["AccessKey"]そのために価値を提供することができれば

StatusCode: 405, ReasonPhrase: '', Version: 2.0, Content: System.Net.Http.StreamContent, Headers: 
 
{ 
 
    server: GSE 
 
    alt-svc: quic=":443"; p="1"; ma=604800 
 
    cache-control: max-age=0, private 
 
    accept-ranges: none 
 
    date: Tue, 29 Sep 2015 16:05:03 GMT 
 
    x-frame-options: SAMEORIGIN 
 
    vary: Accept-Encoding 
 
    x-content-type-options: nosniff 
 
    alternate-protocol: 443:quic,p=1 
 
    x-xss-protection: 1; mode=block 
 
    content-type: application/json 
 
    expires: Tue, 29 Sep 2015 16:05:03 GMT 
 
} 
 
StatusCode: 400, ReasonPhrase: '', Version: 2.0, Content: System.Net.Http.StreamContent, Headers: 
 
{ 
 
    server: GSE 
 
    alt-svc: quic=":443"; p="1"; ma=604800 
 
    cache-control: max-age=0, private 
 
    accept-ranges: none 
 
    date: Tue, 29 Sep 2015 16:05:04 GMT 
 
    x-frame-options: SAMEORIGIN 
 
    vary: X-Origin 
 
    vary: Origin 
 
    vary: Accept-Encoding 
 
    x-content-type-options: nosniff 
 
    alternate-protocol: 443:quic,p=1 
 
    x-xss-protection: 1; mode=block 
 
    content-type: application/json; charset=UTF-8 
 
    expires: Tue, 29 Sep 2015 16:05:04 GMT 
 
}

+0

であなたがトラフィックをしたいとにおいを嗅ぐん何をして、LIBでテストプロジェクトを作成し、プロジェクトでGoogle.Apis.YouTube.v3 Client Libraryを使用できない場合は、完全なエラーメッセージを投稿できるしてください? – helencrump

+0

@helencrumpデバッグ出力付きのポストを更新 –

+0

アクセスしようとしているURLは有効ですか? – helencrump

答えて

1

チェックアウトGoogleのAPIのOAuth2フロー(クライアント側)ページ上のOAuth2アクセストークンを取得する詳細 - https://developers.google.com/youtube/v3/guides/auth/client-side-web-apps#Obtaining_Access_Tokens

あなたがアクセストークンを取得するには、リソースがO /のOAuth2/AUTHとではないことがわかりますo/oauth2/token(コードスニペットから使用していると思われる) - これがサーバーからの405(Method Not Allowed)応答の理由であるはずです。

oauth2 auth_code許可タイプを使用してクライアントIDとクライアントシークレットと引き換えにo/oauth2/tokenがアクセストークンを取得するための正しいリソースであるかどうかを確認できますか?

他の人が405レスポンスを指摘しているように、このメソッドは要求されたリソースに対して許可されていないことを示しています。そして、APIバージョン3でGETする正しいリソースはo/oauth2/authです。

あなたのコードスニペットを見ると、あなたの "AccessKey"、あなたのclient_idとあなたのclient_secretとoauth2 grant_type = auth_codeを送信し、期待してo/oauth2/tokenリソースにGETリクエストを送りますアクセストークンとリフレッシュトークンを戻す。受信したアクセストークンを使用して次のGET要求を作成することを想定しています。

しかし、先に述べたように、それは、O /のOAuth2 /トークンは、YouTubeのAPI v3ではアクセストークンを取得するために、適切なリソースでは表示されません(あなたがV3でこの仕事をしようとしていると仮定)

も、https://developers.google.com/youtube/v3/getting-started < - YouTube API(v3)入門ガイドをチェックして、その手順に従っていることを確認してください。特に、「APIのリストで、YouTube Data API v3のステータスがONになっていることを確認してください」 3bで示唆したように。開始ページで

APIのv3を使用していない(使用していない)場合は教えてください。

+0

私のために働いた - 私はAPIのv3のバージョンを使用しています - https://accounts.google.com/o/oauth2/tokenは私が使用すべきものです。私はAPIのガイドを詳しく見ていきます。 –

+0

それはあなたのために働いたことをうれしく思います。 – g7p

0

をエラーが発生すると、それが役に立ちます。 私の推測では、この変数にはエンコードする文字が含まれています。 あなたのコメントによると、localSettings.Values["AccessKey"]X/XXXXXかもしれません。結果のURLが/token?code=X/XXXXX"...のようなものであれば、試すことができます/token?code=X%2FXXXXX

+0

私はそれを試してみます –

+0

localSettings.Values ["AccessKey"] ToString()。( "/"、 "%2F")は悲しいことに私を助けませんでした –

+0

申し訳ありません。 "..." + HttpUtility.UrlEncode(localSettings.Values ["AccessKey"])+ "..."試してみてください – victor

0

最初のリクエストはHTTP POSTコールでなければなりません。現在、GETを使用しています。 GETメソッドが許可されていないことを示すエラー405が発生しているようです。