更改java客户端和浏览器客户端之间的响应代码

时间:2016-02-16 03:05:32

标签: java http azure redirect oauth-2.0

我试图通过java代码访问一个用于业务oAuth v2.0的驱动器。 A / c到一个驱动器api authenticatoin给出的规范:https://dev.onedrive.com/auth/aad_oauth.htm, 我们需要在azure广告中注册应用程序后获取授权码才能访问onedrive以进行业务。

所以我在Advanced Rest Client(Chrome扩展程序)中尝试了它,并成功地在重定向uri中获取了auth代码(响应代码302是预期的)。

但是,当我尝试使用httpclient / URLConnection / httpURLConection / default httpURLConnection / jsoup在java中实现它时,我得到的响应代码是200 OK,我无法找到标题字段" Location& #34; (我们可以在其中获取auth代码以及重定向uri)。

对于java客户端中的响应,是否应该进行任何特定更改,以便与ARC中的响应一样精确

java方法是否只丢弃这些元素?

1 个答案:

答案 0 :(得分:0)

根据我的理解,您希望像浏览器一样自动请求不重定向的URL。

据我所知,如果未将ClientPNames.HANDLE_REDIRECTS='http.protocol.handle-redirects'设置为布尔值,Apache HttpClient将使用响应代码30x执行以下重定向,请参阅文档http://hc.apache.org/httpcomponents-client-4.2.x/tutorial/html/httpagent.html#d5e1169

  

ClientPNames.HANDLE_REDIRECTS ='http.protocol.handle-redirects':定义是否应自动处理重定向。此参数需要java.lang.Boolean类型的值。如果未设置此参数,HttpClient将自动处理重定向。

但是,我不认为URLConnectionHTTPURLConnection& HttpsURLConnection会自动重定向,即使jsoup已实施。

以下是一些代码,展示了如何自动阻止重定向并提取标题。

1.使用HttpClient

HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false);
HttpGet request = new HttpGet("<URL>");
HttpResponse response = client.execute(request);

//get all headers       
Header[] headers = response.getAllHeaders();
for (Header header : headers) {
    System.out.println("Key : " + header.getName() + " ,Value : " + header.getValue());
}

2.使用HttpURLConnection

URL url = new URL("<URL>");
URLConnection conn = url.openConnection();

//get all headers
Map<String, List<String>> map = conn.getHeaderFields();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
    System.out.println("Key : " + entry.getKey() + " ,Value : " + entry.getValue());
}

希望它有所帮助。最诚挚的问候。