zigxag
Messages postés142Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 octobre 2008
-
12 août 2005 à 10:04
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
18 août 2005 à 19:10
Bonjour !
Je voudrais récupérer une image qui se trouve à une URL donnée, afin de pouvoir l'insérer dans SQLServer. J'ai essayé de faire ceci :
Stream imgStream = File.Open(_ImageURL, FileMode.Open, FileAccess.Read);
mais ca ne marche pas... Une exception est vevée disant "Les formats URI ne sont pas pris en charge". Je programme en C#; savez vous comment faire ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 12 août 2005 à 10:36
Comme ca c'est pas possible, il faut que tu te serves de la classe System.web et des méthodes httpRequest.
T'as de la chance j'ai justement un bout de code qui me permet de savoir si une URL est bonne ou pas
Dim RTN As String = String.Empty
Dim oRequest As HttpWebRequest
oRequest = WebRequest.Create(url)
oRequest.UserAgent = "MyUserAgent"
oRequest.Timeout = TimeOut
Dim oResponse As HttpWebResponse
Try
oResponse = oRequest.GetResponse
If Not oResponse.StatusCode = HttpStatusCode.OK Then
RTN = CInt(oResponse.StatusCode) & " - " & oResponse.StatusCode.ToString
Else
RTN = "OK"
End If
Catch ex1 As WebException
RTN = CInt(ex1.Status) & " - " & ex1.Status.ToString
Catch ex As Exception
RTN = "Pas normal"
End Try
oRequest = Nothing
Aprés tu trouveras un stream dans Oresponse que tu pourras enregistrer dans la base avec un code que j'ai recemment posté sur ce site :)
zigxag
Messages postés142Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 octobre 200812 12 août 2005 à 11:39
Merci !!
Il n'y aurait pas une confusion entre les HttpWebRequest et les WebRequest, dans ton code ?
Dim oRequest As HttpWebRequest
oRequest = WebRequest.Create(url)
...car la méthode Create renvoi un WebRequest que tu affecte à un HttpWebRequest... c'est normal docteur ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 12 août 2005 à 13:28
C'est vrai que cette méthode est beaucoup plus simple :p
Je connaissais pas, mais c'est toujours bon à savoir :)
Mais épuré ma solution se resume a
Dim oRequest As HttpWebRequest
oRequest = WebRequest.Create(url)
Dim oResponse As HttpWebResponse
oResponse = oRequest.GetResponse
Et j'ai beaucoup plus de donnée sur la réponse qui m'a été envoyé, dans ton cas si tu tombes sur une 404 je ne sais pas si ca ca va lancer une exception (je pense que oui) ou autre :)
En tout cas dans ton cas le code que tu proposes est beaucoup plus adapté que le mien :)
zigxag
Messages postés142Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 octobre 200812 17 août 2005 à 16:27
Ah mais il y a une erreur de "Violation du protocole HTTP". En effet, l'url n'est pas une URL classique, mais elle est ainsi : http://192.168.0.150/cgi-bin/jpg/image.cgi?resolution=&compression=
Lorsqu'on se rend à cette adresse, une image est générée à la volée et est affichée dans le navigateur. Or, c'est cette image que mon application doit récuperer.
Le code que tu m'a fourni ainsi que celui que je t'ai copié marchent bien avec une adresse "classique" pointant vers un fichier JPG. Mais ils ne marchent pas dans mon cas...
Tu aurais une solution ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 17 août 2005 à 16:53
hum ...
c'est pas normal ca, car en fait l'url renvoie bien un tableau de byte donc noramelement tu dois pouvoir recuperer le bordel, tu peux me dire un peu plus précisement ou t'as l'erreur ?
le code plus haut (le premier) je l'ai justement fait car j'avais une erreur lors de ma requete (500) donc ca me levé une exception, et j'ai pu recuperé le code html de l'erreur, bref l'erreur etait car il n'y avait pas de user agent (et le site se servait du user agent, mais ne vérifiait pas s'il etait vide (je ne cite pas le site en question ca risquerait de ternir l'image du site sur lequel on se trouve ;))) donc peut etre que toi aussi, ou sinon peut etre que t'as besoin d'etre authentifié ou de passer des paramètres a ton url etc...
si tu ouvres un navigateur sur l'adresse de l'image ca fonctionne ? et l'erreur que tu as, tu peux m'en dire un peu plus ?
Ce code plante au niveau de la méthode DownloadData. Une exception est levée disant : "La connexion sous-jacente a été fermée : Le serveur a commis une violation de protocole HTTP".
Cette adresse est en fait l'adresse réseau d'une webcam retournant une image "snapshot". Cette image JPG est donc générée à la volée. Les paramètres de l'URL ne sont pas importants et peuvent être omis.
Merci pour ton aide en tout cas.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 17 août 2005 à 17:45
Si tu fais avec ma méthode ca devrait te lancer une exception
dans le ex tu dois pouvoir recuperer le stream de la réponse peut etre que t'auras plus d'info la dessus, sinon il doit surement manquer des paramètres :s
zigxag
Messages postés142Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 octobre 200812 17 août 2005 à 17:53
Je ne pense pas que ce soit à cause des paramètres (tu veux bien parler des paramètres de l'URL ?) car IE ou firefox affichent bien l'image JPG,eux. J'ai regardé dans le source de la page du navigateur, c'est bien un tableau de bytes qui est récupéré (et que le navigater interprete en affichant l'image)...
Si le navigateur le fait, pourquoi pas le C# ??
dans l'exception, j'ai rien vu de special, à part à un tableau de 49 bytes... Ca fait peu pour une image 320x240...
zigxag
Messages postés142Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 octobre 200812 17 août 2005 à 18:04
oui avec un user agent ca fait la meme chose... J'ai regardé sur google mais j'ai rien trouvé...
Dans l'exception, le seul message que j'ai est celui que j'ai écrit plus haut, je vois rien d'autre. bon bah tant pis, merci quand meme pour ton aide ! Je te remet le code, au cas où tu trouverais quelque chose qui cloche... :s
zigxag
Messages postés142Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention 2 octobre 200812 18 août 2005 à 13:59
Ah mais j'ai un peu compris : je viole le protocole HTTP car la page appelée n'est pas une page HTML. Donc les méthodes HTTPWebRequest et GetResponse ne peuvent pas être utilisées.
Cette URL que je veux atteindre renvoi un tableau de bytes correspondant à une image. Les navigateurs l'interpretent mais la page renvoyée ne contient pas du tout une entete HTTP classique...
Donc ma nouvelle question : comment récupérer le tableau de bytes qui se trouve à cette url : http://192.168.0.150/cgi-bin/jpg/image.cgi ?