1

我正在使用 Apache HttpClient 4.x 发送一个 http get/head 请求。我正在发送一个带有“ http://example.com/getAccessToken ”之类的 url 的请求。我希望响应是一个重定向 url,在返回的 url 中带有参数,如“ 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();

简而言之:我想要的是执行一个原始 url,然后得到另一个 url,它有一个名为“code”的参数。然后我想得到那个参数的值。

编辑:

我也试过这个,但它返回相同的原始 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);返回空

4

1 回答 1

0

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

话虽如此,您可以防止 HttpClient 遵循重定向,请参阅此答案:如何防止 apache http 客户端遵循重定向

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

HeaderIterator iterator = httpResponse.headerIterator("Location");
while(iterator.hasNext()) {
  Header header = iterator.nextHeader();
  String redirectUrl = header.getValue();
}
于 2013-08-06T22:55:11.620 回答