|
|
|
|
Bonjour !
J'ai fait un truc qui récupère les liens situés dans les balises <a href> des pages html.
Si le lien est du type <a href = "/mainlinglist.html">
Je rajoute l'url de la page courante avant pour obtenir le lien complet.
Mais là, problème !
Si l'url de la page est webby.free.fr/html/images.html par exemple, regardez dans le code source de cette page, il y a un lien /caracteres.html
Mais l'url correcte n'est pas webby.free.fr/html/images.html/caracteres.html
mais webby.free.fr/html/caracteres.html
Quest-ce que ça veut dire ? où sont les ../caracteres.html qui me permettrait de savoir qu'ils faut remonter dans l'arborescence ?
J'espère que j'ai été claire, et qu'il y aura des réponses ;-)
merci !
Voici les liens relatifs et leur correspondance en lien absolu :
|
Et quand tu parles de la racine du site, est-ce que c'est le host, ou est-ce que c'est le début de l'url avant un /
|
Je me pose encore une question ...
|
C'est très clair !
|
Normalement une url s'écrit soit comme ca :
import java.net.*;
URL lien = new URL("http://www.monsite.com/...");
String typeMIME = lien.openConnection().getContentType();
ca te renvoie le type MIME du fichier vers lequel pointe l'URL. Pour plus d'infos sur le type MIME des fichiers : http://www.commentcamarche.net/systemes/mime.php3 Mal nommer les choses, c'est ajouter aux malheurs du monde. (Albert Camus) |
Répondre à karine
|
Si tu veux, j'ai écrit un bout de code qui transforme un lien relatif en lien absolu (j'en ai eu besoin pour mon aspirateur de pages web).
/**
* Méthode qui transforme un lien relatif en lien absolu
*
* @param str lien relatif
* @return lien absolu
*/
private String transforme(String str){
/** on vérifie si le lien commence par http:// auquel cas
* c'est un lien absolu */
Pattern motif1 = Pattern.compile("^http://", Pattern.CASE_INSENSITIVE);
Matcher moteur1 = motif1.matcher(str);
boolean ok1 = moteur1.find();
/** on décompose le lien selon les slash (/) */
String[] separe = lien_.toString().split("/");
/** longueur du tableau précédent */
int n = separe.length;
/** on récupère le nom du fichier pour savoir jusqu'où remonter */
String chemin = lien_.getFile();
String[] name = chemin.split("/");
if (name.length < (n-2) )
n--;
else{
String[] separe2 = name[n-2-1].split("\\.");
if (separe2.length >1)
n--;
}
/** on cherche si on doit revenir à la racine du site */
Pattern motifRacine = Pattern.compile("^/");
Matcher moteurRacine = motifRacine.matcher(str);
boolean okRacine = moteurRacine.find();
/** on cherche si c'est un lien relatif introduit par: ./ */
Pattern motifRelatif = Pattern.compile("^\\./");
Matcher moteurRelatif = motifRelatif.matcher(str);
boolean okRelatif = moteurRelatif.find();
if (okRelatif) {str = str.substring(2);}
/** on cherche si on doit remonter aux répertoires parents
* (introduit par ../) */
Pattern motifParent = Pattern.compile("^\\.\\./");
Matcher moteurParent = motifParent.matcher(str);
/** dans ce cas on traite le lien */
while (moteurParent.find()){
/** on enlève les 3 premiers caractères (../) */
str = str.substring(3);
/** on recommence pour voir s'il faut encore remonter
* pour cela on modifie le moteur de recherche */
moteurParent = motifParent.matcher(str);
n--;
}
/** lien absolu qui sera retourné à la fin */
String lienAbs;
/** on commence à traiter le lien */
/** si lien est déjà absolu, on ne fait rien */
if (!ok1){
/** si l'on doit revenir à la racine du site c'est simple */
if (okRacine)
lienAbs = "http://"+lien_.getHost().toString()+str;
/** sinon */
else{
String s="";
for (int i=0; i<n; i++){
s = s+separe[i]+"/";
}
lienAbs = s+str;
}
}
/** si le lien est déjà absolu on ne le modifie pas */
else {lienAbs = str;}
/** on renvoie le lien absolu */
return lienAbs;
}
-------------------- fin ------------------------ Mal nommer les choses, c'est ajouter aux malheurs du monde. (Albert Camus) |
Répondre à nul de l'internet
|