2013-08-06 205 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。 –