2012-03-16 6 views
1

OathCallBackページの次のURLから、Javaを使用してaccess_tokenとtoken_typeを抽出します。どのようにそれを行うにはどのようなアイデア?Javaを使用してWebページのURLからクエリ文字列を抽出する方法

http://myserver.com/OathCallBack#state=/profile&access_token=ya29.AHES6ZQLqtYrPKuw2pMzURJtWuvINspm8-Vf5x-MZ5YzqVy5&token_type=Bearer&expires_in=3600

Iは次のように試みたが、必要な情報を抽出することができません。

{ 
    String scheme = req.getScheme();    // http 
    String serverName = req.getServerName();  // myserver.com 
    int serverPort = req.getServerPort();  // 80 
    String contextPath = req.getContextPath(); 
    String servletPath = req.getServletPath(); 
    String pathInfo = req.getPathInfo();   // return null and exception 
    String queryString = req.getQueryString(); // return null 

} 

< ------------------------------------------ ----------------> 私はあなたが素敵な返事をあなたに一人一人に感謝し、

Googleは、

をやった私の質問

を編集するつもりですURL

http://developers.google.com/accounts/docs/OAuth2Login

によってそのリンクを参照することができます

上記URLページには次のリンクがあります

http://accounts.google.com/o/oauth2/auth?スコープ= https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email + https%3A%2F%2Fwww .googleapis.com%2Fauth%2Fuserinfo.profile &状態=%2Fprofile & redirect_uri = https%3A% 2F%2Foauth2-login-demo.appspot.com%2Foauthcallback & response_type =トークン&のclient_id = 812741506391.apps.googleusercontent.com

あなたがリンクの上をクリックすると、あなたは、Gmailのログインアカウントaccess_tokenはを取得し、そのうトークンは#記号の後にある

+0

URLの "?" "#"したがってクエリ文字列は抽出されません。文字列内のURL全体を読み込み/取得することができれば抽出されます。例えば、access_tokenなどの完全なURLを読むには – Khan

+0

req.getRequestURL() –

+0

reqを試しましたか? getRequestURL()はhttp://myserver.com/OathCallBackだけを取得しますが、他の引数には興味があります。たとえば、access_tokenなど – Khan

答えて

0

一部の文字はURLに含めることはできません(スペースなど)。また、一部の文字はURL内で特別な意味を持ちます。たとえば、文字#を使用してさらにサブセクション(またはフラグメント)のdo碑文;文字=は名前から値を分離するために使用されます。

は、より多くのためにhttp://en.wikipedia.org/wiki/Query_stringを参照してください。

+0

元の質問を編集してください – Khan

0

する必要がありますそれは '#' のように見えます '?'。通常のURLで

は、パラメータは次のキーと値のペアとして渡されます「?」 '&'を使用して連鎖した複数のパラメータ次のようにURLになります。

ます。http://someserver.com/somedir/somepage.html?param1=value1 & PARAM2 = value2の& param3 = VALUE3。

通常、Javaサーブレットコンテナは「?」の後にすべてを返します。 getQueryString()を呼び出すときに '?'がないためにnullを返します。

@Sandeep Nairは、getRequestURL()があなたにこの完全なURLを返すように提案しています。あなたは必要な情報を得るために正規表現を使用して解析することができます。しかし、getRequestURL()は通常、クエリ文字列を返さないので、このメソッドを使用すると、「#」のかなりがあるという事実に依存している

(?<=access_token=)[a-zA-Z0-9.-]* 

:使用する可能性の正規表現は、の線に沿ってだろうと '?'おそらく大きな解決策ではないでしょう。 hereを参照してください。

「#」の代わりに「#」が表示される理由を知ることをお勧めします。これを変更しようとすると、サーブレットコンテナがURLパラメータを管理し、request.getAttribute( "access_token")およびrequest.getAttribute( "token_type")(hereを参照)を呼び出すと、値を文字列として返します。

0

を呼び出してクエリ文字列を取得します。string queryString = req.getQueryString();

クエリ文字列がないため、正しくnullが返されます。 "#"の後の文字はアンカー指定であり、ブラウザにのみ表示され、サーバーには送信されません。

関連する問題