2017-10-16 12 views
0

私の目標は、特定のURLのすべての302リダイレクトホップを解析するためにjava.net.HttpURLConnectionを使用することです。唯一の302の回答があります場合、それはかなりうまく動作しJava HttpURLConnection - すべての302のリダイレクトホップを列挙してください

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); 

これは私のスニペットコード(私は実際には才能SWでそれを使用しています)です。 たとえば、row2.ulr = "https://jigsaw.w3.org/HTTP/300/302.html"を入力すると、コードが出力されます - >https://jigsaw.w3.org/HTTP/300/Overview.htmlの魔法使いは100%正しいです。 > redirect-> www.facebook.com/ACCOUNT_NAME

- www.facebook.com/ID_account:

私の問題は、私はいくつかの302応答を解析できませんよということで、典型的な例はFacebookのURLです

> >>> 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を見つける方法上の任意の提案「Locat: enter image description here

これはCURL出力は次のとおりです。(私は秒1を必要とする)302応答 - オンラインリダイレクトチェッカーを使用して、私は2を発見しましたイオン " - >https://www.facebook.com/a_name_account/?事前に

おかげ Reg群 S.

答えて

1

これはRecursive Methodのための偉大な行動だろう。

応答ヘッダーにまだ場所があると判断した場合でも、メソッドを呼び出すことができます。

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; 
} 
+0

Thxですが、単純に関数を呼び出すことなく合計302のインデックスを取得する方法はありますか? – user3925023

+0

また、ラインURLを説明することもできます。url =新しいURL(場所); thx – user3925023

+0

私はリダイレクトごとにリクエストをしなければならないと信じています。 1つのhttp要求だけですべてのリダイレクトを取得する魔法の方法はありません。最後のものを見つけるだけです... – hooknc

関連する問題