Chargement web uri spéciale

Résolu
Krantseth Messages postés 7 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 9 novembre 2008 - 6 nov. 2008 à 15:29
Krantseth Messages postés 7 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 9 novembre 2008 - 9 nov. 2008 à 23:20
<hr style="COLOR: #d1d1e1" size="1" />
<!-- / icon and title -->
<!-- message -->

Après avoir essayé multiples méthodes j'aimerais votre avis sur la question .

Je cherche a récupérer le code source d'une page web ... jusque là pas de soucis.

Le souci se pose lorsque j'essaie sur l'url suivante :
"http://lorebook.lotro.com/index.php/Quest:A_Fern_By_Any_Other_Name...."

En effet, System.Net.WebClient enlève automatiquement les .... en fin d'url ce qui me retourne vers une page d'erreur et donc je ne récupère pas les données voulues.

En faisant un httprequest, j'ai une exception comme quoi ma chaine n'est pas une uri valide ... normal ...

Par contre je me suis apperçu qu'en passant par une openfiledialog et en saisissant l'url dans l'adresse et en cliquant sur ouvrir il me créait une copie locale du fichier que je pouvais ensuite lire ... Le seul souci dans ce cas c'est que le click sur le bouton ouvrir de lu dialog n'est pas automatisable ...

Une idée sur la question ?

9 réponses

Krantseth Messages postés 7 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 9 novembre 2008
7 nov. 2008 à 13:34
J'ai vu juste ...  en utilisant les sockets, en construisant la requête http et en nettoyant la réponse (suppression de l'entête http) on peut récupérer le html de cette page ....

Voici un bout de code qui montre la mise enoeuvre :




private





static





string

DownLoadHTML(


string

Adresse)



{




//Déclarations










string

s_URL, s_Host, s_Chemin, s_Resultat, s_RequeteHTTP;



TcpClient

WebClient =


new





TcpClient

();



NetworkStream

WebStream;



StreamWriter

WebWriter;



StreamReader

WebReader;



// Suppression de la mention "http://"


s_URL = Adresse;








if

(s_URL.ToUpper().StartsWith(


"HTTP://"

))s_URL = s_URL.Remove(0, 7);



// On découpe l'adresse en deux parties, l'hôte et le reste de la requête


s_Host = s_URL.Split(





'/'

)[0];s_Chemin = s_URL.Remove(0, s_URL.Split(



'/'

)[0].Length);



if

(s_Chemin.Length 0)s_Chemin



"/"

;



// On construit notre requete HTTP


s_RequeteHTTP =





"GET "

+ s_Chemin +


" HTTP/1.1\r\nHost: "

+ s_Host +


"\r\nConnection: Close\r\n\r\n"

;



// On ouvre une socket sur le port 80 du serveur h“te


WebClient.Connect(s_Host, 80);


WebStream = WebClient.GetStream();


WebWriter =





new





StreamWriter

(WebStream);WebWriter.Write(s_RequeteHTTP);

WebWriter.Flush();

WebReader =



new





StreamReader

(WebStream);



//On vérifie si la requête s'est bien exécutée








string

L1 = WebReader.ReadLine();



if

(L1.Split(


' '

)[2] !=


"OK"

)



throw





new





Exception

(


"Erreur de chargement"

);



// On passe l'entête de la réponse








while

(WebReader.ReadLine() !=


""

) { }WebReader.ReadLine();



// On stock la page html dans notre variable "Resultat"


s_Resultat = WebReader.ReadToEnd();








// On nettoye la fin du document html en supprimant les retour chariot, début de ligne et le 0 final








while

(s_Resultat.EndsWith(


"\r"

) || s_Resultat.EndsWith(


"0"

) || s_Resultat.EndsWith(


"\n"

))s_Resultat = s_Resultat.Remove(s_Resultat.Length - 1);



// On ferme les flux


WebStream.Close();


WebStream =





null

;WebClient.Close();

WebClient =



null

;WebWriter.Close();

WebWriter =



null

;WebReader.Close();

WebReader =



null

;



// On renvoi notre résultat








return

s_Resultat;}
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 nov. 2008 à 15:52
Hello,
Tu as essayé qqch comme ceci:

WebClient client =
new
WebClient();
client.DownloadFile(
"http://lorebook.lotro.com/index.php/Quest:A_Fern_By_Any_Other_Name....", tralala);

<hr />
-Blog-
-WebSite-
0
Krantseth Messages postés 7 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 9 novembre 2008
6 nov. 2008 à 16:02
Dans ce cas il enlève automatiquement les .... et me renvoi vers unec page d'erreur ..
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 nov. 2008 à 08:19
Bizarre cette url...
J'ai essayé deux trois trucs mais pour le moment j'ai pas non plus réussi.
Et toi ?

<hr />
-Blog-
-WebSite-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Krantseth Messages postés 7 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 9 novembre 2008
7 nov. 2008 à 09:27
Pas encore trouvé non plus .... je chercherai en partant de plus bas que le WebClient ....  peut être le socket directement ...

Faudra juste que je construise la requête http :p

Je vous tiens au courrant
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 nov. 2008 à 20:39
Bien ;-)
Ceci dit, si WebClient ne supporte pas ce genre d'URL c'est probablement qu'elles ne sont pas valides
Pour en être sûr, faudrait lire la RFC 3986 mais j'ai pas le courage de chercher la dedans...

<hr />
-Blog-
-WebSite-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 nov. 2008 à 20:44
Bon, j'ai quand même jeté un coup d'oeil
La section 2.3 (page 12) semblerait autorisé le "."

Faudrait voir plus en profeur et faire des tests et le cas échéant reporter le bug à la team de dev. de C#
Je regarderai en début de semaine prochaine...

<hr />
-Blog-
-WebSite-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
9 nov. 2008 à 22:37
Finalement non, la RFC indique que ce type d'URL n'est pas valide.
En d'autres termes, c'est normal que le WebClient n'accepte pas ce type d'URL...

<hr />
-Blog-
-WebSite-
0
Krantseth Messages postés 7 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 9 novembre 2008
9 nov. 2008 à 23:20
Merci en tous cas de ton aide et de ces précisions ... :)
0
Rejoignez-nous