从apache HttpResponse获取响应Uri参数

时间:2013-08-06 22:47:33

标签: java apache http

我正在使用Apache HttpClient 4.x发送http get / head请求。我正在发送一个请求,其中包含“http://example.com/getAccessToken”等网址。我希望响应是一个重定向网址,其中包含返回网址中的参数,例如“http://redirecturl.com/?code=accessTokenStuff”。我希望能够解析响应重定向url参数,即我想得到“accessTokenStuff”。我怎么能这样做?

HttpClient client = new DefaultHttpClient();
            HttpHead request = new HttpHead(authUrl);
            HttpResponse response = client.execute(request);
            System.out.println(response.getStatusLine().getStatusCode());//returns 200

            request.releaseConnection();

简而言之:我想要的是执行原始网址然后获取结果,这是另一个具有“代码”参数的网址。然后我想得到该参数的值。

编辑:

我也试过了,但它返回了相同的原始网址

DefaultHttpClient client = new DefaultHttpClient();
            HttpParams params = client.getParams();
            HttpClientParams.setRedirecting(params, false);
            HttpGet request = new HttpGet(authUrl);
            HttpResponse response = client.execute(request);
            String location = response.getLastHeader("Location").getValue();//returns same original url
            System.out.println(location);
            request.releaseConnection();

设置HttpClientParams.setRedirecting(params, true);返回null

1 个答案:

答案 0 :(得分:0)

Http响应不采取“重定向网址”的形式。重定向和响应都是不同的(但相关的)概念。重定向通常意味着“从此地址而不是原始地址获取您的回复”。

话虽如此,您可以阻止HttpClient关注重定向,请参阅以下答案:How to prevent apache http client from following a redirect

当您的HttpClient未遵循重定向时,您可以检查其响应的“Location:”标题,例如:

HeaderIterator iterator = httpResponse.headerIterator("Location");
while(iterator.hasNext()) {
  Header header = iterator.nextHeader();
  String redirectUrl = header.getValue();
}