首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpURLConnection -枚举所有302个重定向跳

HttpURLConnection -枚举所有302个重定向跳
EN

Stack Overflow用户
提问于 2017-10-16 16:10:30
回答 1查看 586关注 0票数 0

我的目标是使用java.net.HttpURLConnection来解析给定URL的所有302个重定向跳。

这是我的代码片段(实际上我在Talend SW中使用它):

代码语言:javascript
复制
String url = row2.url;
java.net.HttpURLConnection con = (java.net.HttpURLConnection) new java.net.URL(url).openConnection();
con.setInstanceFollowRedirects(false);
con.connect();
String realURL = con.getHeaderField("Location");

System.out.println(realURL);

如果只有一个302的回复,它就会运行得很好。例如,如果我填充row2.ulr= "https://jigsaw.w3.org/HTTP/300/302.html“,代码将输出-> https://jigsaw.w3.org/HTTP/300/Overview.html,它是100%正确的。

我的问题是我无法解析几个302个回复,一个典型的例子是Facebook : www.facebook.com/ID_account >redirect-> www.facebook.com/ACCOUNT_NAME

使用在线重定向检查器,我找到了2-302个响应(我需要第二个响应):

这是卷曲输出:

代码语言:javascript
复制
> >>> http://www.facebook.com/123456789
> 
> > --------------------------------------------
> > 302 Found
> > --------------------------------------------
> 
> Status:   302 Found Code: 302
> Location: https://www.facebook.com/123456789 Vary:    Accept-Encoding
> Content-Type: text/html; charset=UTF-8
> X-FB-Debug:   Muf4PfCP9TRKCO17QUf7SV2vsdnrCu6Gw2+sjWAKe0QPGdAToJPcmgH5LHv3NIAhzsJXfPB3a9/mVtuhiiEihA==
> Date: Mon, 16 Oct 2017 16:02:55 GMT Connection:   close
> Content-Length:   0
> 
> 
> 
> 
> >>> https://www.facebook.com/123456789
> 
> > --------------------------------------------
> > 302 Found
> > --------------------------------------------
> 
> Status:   302 Found Code: 302 X-XSS-Protection:   0
> public-key-pins-report-only:  max-age=600;
> pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=";
> pin-sha256="k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=";
> pin-sha256="gMxWOrX4PMQesK9qFNbYBxjBfjUvlkn/vN1n+L9lE5E=";
> pin-sha256="q4PO2G2cbkZhZ82+JgmRUyGMoAeozA+BSXVXQWB8XWQ=";
> report-uri="http://reports.fb.com/hpkp/" Pragma:  no-cache
> Location: https://www.facebook.com/a_name_account/
> Cache-Control:    private, no-cache, no-store, must-revalidate
> X-Frame-Options:  DENY Strict-Transport-Security: max-age=15552000;
> preload X-Content-Type-Options:   nosniff Expires:    Sat, 01 Jan 2000
> 00:00:00 GMT Vary:    Accept-Encoding Content-Type:   text/html;
> charset=UTF-8
> X-FB-Debug:   j2KCBNZ1poIJ0xUeeQYbinpcqq2avoI4z8eWb9Dx/yUUg98uyGYGadydia7en1s5X4DJeaJB7VjxYaRvP+psCw==
> Date: Mon, 16 Oct 2017 16:02:55 GMT Connection:   close
> Content-Length:   0
> 
> 
> 
> 
> >>> https://www.facebook.com/a_name_account/

关于如何找到第二个302号“位置”的任何建议,->帐户/

谢谢你,雷格斯S。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 18:31:54

对于递推法来说,这将是很好的行为。

如果确定响应头中仍有位置,则可以继续调用方法。

代码语言:javascript
复制
public void recurseLocation(String url) {

    URL url = new URL(location);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setInstanceFollowRedirects(false);
    connection.connect();
    String newLocation = connection.getHeaderField("Location");

    if (newLocation != null) {
        newLocation = recurseLocation(newLocation);
    } else {
        newLocation = location;
    }

    return newLocation;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46774622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档