2013-08-06 166 views
1

获得响应的URI参数我发送一个HTTP GET /使用HEAD请求Apache的HttpClient的4.x版我送包含“http://example.com/getAccessToken”的URL的请求。我期待的回应是重定向URL在如“http://redirecturl.com/?code=accessTokenStuff”返回的URL参数。我希望能够解析响应重定向url参数,即我想获得“accessTokenStuff”。我怎样才能做到这一点?从阿帕奇的HttpResponse

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

      request.releaseConnection(); 

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

编辑:

我也试过,但它返回相同的原始URL

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

见 http://stackoverflow.com/questions/1456987/httpclient-4-how-to-capture-last-redirect-url –

回答

0

HTTP响应不走的 “重定向URL” 的形式。重定向和响应都是不同的(但相关的)概念。重定向通常意味着“从这个地址得到你的回应,而不是原来的回应”。

话虽如此,你可以阻止的HttpClient从以下重定向,看到这样的回答:How to prevent apache http client from following a redirect

当你的HttpClient不跟随重定向,您可以检查“的位置:”头的响应,例如:

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

我真的不明白这一点。我想要的是执行原始网址,然后得到的结果是另一个具有名为“代码”的参数的网址。然后我想获取该参数的值。 –

+0

让“位置”标题的值返回任何 –

+0

我设置客户端不跟随重定向URL,但是当我访问Location头,我得到的是旧的URL不是重定向URL。 –