2017-09-23 1 views
1

Hier ist der Link Ich versuche, meine Methode zu öffnen mit:Mit jsoup zu erhalten und weitergeleitet Link zu einem Link mit Token = am Ende

https://www.deviantart.com/download/652802405/sugar_rush_by_rainbow_highway-dasntk5.png?token=2080f7bdd7953b1b5128e45fe1f8d06c6ba8c4f1&ts=1506130109

Hier ist der Code, den ich für die Öffnung der es haben und funktioniert es nicht ....

public static Document loadURL(String arg) throws IOException 
{ 
    /* 
    * This is a method that fake an agent and make a document out of 
    * a url link. 
    */ 
     try 
     { 
     Document doc = Jsoup.connect(arg) 
        .data("query", "Java") 
        .userAgent("Mozilla") 
        .cookie("auth", "token") 
        .timeout(10000) 
        .post(); 
     return doc; 
     } 

ich zunächst einmal wissen will, was das Wort tut? token = in dem End-Mittel?

Warum kann mein Browser den Link öffnen, während diese Methode nicht funktioniert?

Wenn ein Webbrowser es tun kann, wie kann ich jsoup verwenden, um das gleiche zu tun?

Ich suchte und ich Art auf die Idee kommen, dass es sich um eine Cookies Authentifizierung ist, aber ich habe nicht das Detail. (Ich wahrscheinlich wissen, wie es zu fälschen, wenn ich die Details wissen ...)

Falls Sie sich fragen, wo ist der Link auf der Seite, ist es hier: https://rainbow-highway.deviantart.com/art/Sugar-Rush-652802405

Muss ich die Cookies auf dieser Seite müssen am Ende der Umleitung oder ich brauche nur die Phantasie hex-Code in Token? = ?????

Der Link ist im Download-Botton, es ist meine eigene DA-Seite.

Antwort

0

Ich fand eine Lösung und es funktioniert für die Website deviant art; inspiriert von einem Projekt in GitHub.

https://github.com/4pr0n/ripme/blob/master/src/main/java/com/rarchives/ripme/ripper/rippers/DeviantartRipper.java

Map<String,String> cookies = new HashMap<String , String>(); 

    org.jsoup.Connection.Response resp = 
      Jsoup.connect("https://sorcerushorserus.deviantart.com/art/Dash-Academy-2-Hot-Flank-Part8-263131103") 
      .userAgent("Mozilla").execute(); 

    cookies = resp.cookies(); 

    Document doc = resp.parse(); 

    Elements eles = doc.select("a.dev-page-download"); 

    if(eles.size()>0) 
    { 
     System.out.println("We have the downlaod link on this page!"); 

     String downloadlink = eles.get(0).attr("href"); 

     System.out.println(":"+downloadlink); 

     HttpURLConnection con = (HttpURLConnection) new URL(downloadlink).openConnection(); 

     String cookiesString = ""; 

     for(Map.Entry<String, String> entry:cookies.entrySet()) 
     { 
      cookiesString = cookiesString+entry.getKey()+"="+entry.getValue()+";"; 
     } 

     cookiesString = cookiesString.substring(0, cookiesString.length()-1); 

     System.out.println("Cookie String: "+cookiesString); 

     con.setRequestProperty("Cookie", cookiesString); 

     con.setRequestProperty("User-Agent","Mozilla"); 

     con.setInstanceFollowRedirects(true); 

     con.connect(); 

     int respondcode = con.getResponseCode(); 

     Thread.sleep(10000); 

     String location = con.getURL().toString(); 

     System.out.println("response code: "+ respondcode); 

     System.out.println("image location: "+location); 

     con.disconnect(); 

so .... cool ...