VB.net Télécharger HTML d'une URL
Im dans le besoin de télécharger le code HTML généré par un serveur après l'envoi d'une URL. J'ai pensé que peut-être le webclient.downloadfile pourrait fonctionner, mais il semble que cela donne lorsque vous n'avez pas la fin de l'URL avec l'extension de fichier.
Si j'ai un contrôle webbrowser mis en place, qui a accédé à un site sur le même nom de domaine, cependant, que le navigateur dispose d'un gestionnaire de défini pour le documentcompleted événement que je ne veux pas le feu.
Si la meilleure solution est de charger la page et utiliser le contrôle webbrowser.documentstream à obtenir un flux de données et de les écrire dans un fichier, j'ai 2 questions:
1) le document.flux renvoie un système.io.flux et l'objet de fichier utilise le système.io.filestream. Je peux facilement écrire un flux à un filestream et si oui, comment?
2) j'ai répondu à cette question pour moi-même quand j'étais en tapant ça 😛
Si ce n'est pas la meilleure solution et le client web peut en effet télécharger un fichier qui est généré, comment pourrais-je aller à ce sujet?\
Edit: Si je suis hors de la base, n'hésitez pas à me le faire savoir 🙂 je suis encore assez nouveau pour VB
edit:
La ci-dessous ne fonctionne pas. Mon étape à travers révélé que je suis en fait en passant données utilisables pour les fonctions, mais pour une raison quelconque, les fichiers ne sont pas encore en cours de création.
Uniencoding déclaration:
Dim uniencoding As New System.Text.UnicodeEncoding()
Code:
request = WebRequest.Create(tempstring)
Using response As WebResponse = request.GetResponse()
Using reader As New StreamReader(response.GetResponseStream())
Dim html As String = reader.ReadToEnd()
fstream = New FileStream(surl, FileMode.Create)
fstream.Write(uniencoding.GetBytes(html), 0, Len(uniencoding.GetBytes(html))) 'Write the HTML to a local file
End Using
End Using
- Vous n'avez pas besoin d'une extension de fichier, cela fonctionne très bien avec wc.DownloadFile("stackoverflow.com/questions/19181470/...", "C:\temp.txt") si vous ne voulez pas enregistrer dans un fichier, vous pouvez utiliser DownloadString
- Je ne veux enregistrer dans un fichier, mais downloadfile ne semble pas fonctionner. Je vais poster le code dans une deuxième
Vous devez vous connecter pour publier un commentaire.
Si tout ce que vous voulez faire est d'obtenir le code HTML (ou quelle que soit la réponse contient), sans réellement le rendu à l'écran, vous pouvez le faire facilement à l'aide de la
WebRequest
classe.File.WriteAllText
méthode permet de créer le fichier s'il n'existe pas et il va écraser le fichier s'il existe déjà. Il n'a évidemment pas vous donner autant de contrôle que certains des autres e/S de fichier options, mais quand c'est tout ce que vous devez faire, c'est assez simple et pratique.FileStream
est un échec. Pour moi, à cause d'un invalide fonte d'exception, donc j'ai dû changerLen(uniencoding.GetBytes(html))
àuniencoding.GetBytes(html).Length
, et je l'ai mis dans unUsing
bloc donc il serait automatiquement, fermez le fichier et mettez le flux. Mais à part ça, il a bien fonctionné. Pour ce que ça vaut, si vous ne voulez écrire une chaîne de caractères à un flux de données, je vous conseille d'utiliser leStreamWriter
de le faire plutôt que d'obtenir les octets à partir de l'encodage vous-même.