【问题标题】:Get response Uri parameters from apache HttpResponse从 apache HttpResponse 获取响应 Uri 参数
【发布时间】:2013-08-07 07:33:30
【问题描述】:

我正在使用 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 的结果,该 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);返回null

【问题讨论】:

标签: java apache http


【解决方案1】:

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

话虽如此,您可以阻止 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();
}

【讨论】:

  • 我不太明白这个。我想要的是执行一个原始 url,然后得到另一个 url 的结果,该 url 有一个名为“code”的参数。然后我想得到那个参数的值。
  • 获取“location”标头的值不会返回任何内容
  • 我将客户端设置为不遵循重定向 URL,但是当我访问 Location 标头时,我得到的是旧 URL 而不是重定向 URL。
  • 您提到的事实与http重定向的已知行为相反。当您使用键“Location:”检查 response 标头时,您将获得“重定向 URL”。见:en.wikipedia.org/wiki/URL_redirection#HTTP_status_codes_3xx
猜你喜欢
  • 2020-08-27
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2021-08-14
  • 2012-06-23
相关资源
最近更新 更多