Как извлечь строку запроса из URL веб-страницы, используя Java - PullRequest
1 голос
/ 16 марта 2012

Из следующего URL на странице OathCallBack я хочу извлечь access_token и token_type, используя Java.Любая идея, как это сделать?

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

Я попробовал следующее, но не смог извлечь необходимую информацию.

{
    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? scope = https% 3A% 2F% 2Fwww.googleapis.com%2Fauth% 2Fuserinfo.email + https% 3A% 2F% 2Fwww‌ .googleapis.com% 2Fauth% 2Fuserinfo.profile & state =% 2Fprofile & redirect_uri = https% 3A% 2F% 2Foauth2-login-demo.appspot.com% 2 & ответная реакция типа 2client_id = 812741506391.apps.googleusercontent.com

при нажатии на указанную выше ссылку вы получите учетную запись для входа в gmail access_token, и этот токен будет указан после # sign

Ответы [ 3 ]

0 голосов
/ 16 марта 2012

Похоже, что '#' должно быть '?'.

В обычном URL параметры передаются в виде пар «ключ-значение» после «?» и несколько параметров, соединенных вместе, используя '&'. URL может выглядеть следующим образом:

http: //someserver.com/somedir/somepage.html?param1=value1&param2=value2&param3=value3.

Обычно контейнер сервлетов Java возвращает все после '?' при вызове getQueryString (), но из-за отсутствия символа «?» возвращает ноль.

Как @Sandeep Nair предложил, getRequestURL () должен вернуть вам полный URL-адрес, и вы можете проанализировать его с помощью регулярных выражений, чтобы получить необходимую информацию. Возможное регулярное выражение для использования будет выглядеть следующим образом:

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

Однако getRequestURL () обычно НЕ возвращает строку запроса, поэтому использование этого метода основывается на том факте, что вместо '#' и '?' и поэтому, вероятно, не очень хорошее решение. Смотри здесь .

Я бы посоветовал вам выяснить, почему вы получаете «#» вместо «?» и попытайтесь изменить это, если вы можете сделать это, тогда контейнер сервлета должен управлять параметрами URL для вас и вызвать request.getAttribute ("access_token") и request.getAttribute ("token_type") (см. здесь ) вернет оба значения в виде строк.

0 голосов
/ 16 марта 2012

Вы получаете строку запроса, вызывая String queryString = req.getQueryString ();

В вашем случае он правильно возвращает ноль, так как строка запроса отсутствует.Символы после «#» являются спецификацией привязки, которая видна только браузеру и не отправляется на сервер.

0 голосов
/ 16 марта 2012

Некоторые символы не могут быть частью URL (например, пробел), а некоторые другие символы имеют специальное значение в URL: например, символ # можно использовать для дальнейшего указания подраздела (или фрагмента) документ; символ = используется для отделения имени от значения.

см. http://en.wikipedia.org/wiki/Query_string для получения дополнительной информации:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...