我正在使用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
答案 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();
}