OVH Cloud OVH Cloud

problème avec une HttpWebRequest

2 réponses
Avatar
prady92
Bonjour,

j'ai une windowsform avec un bouton et un contrôle richtextbox pour
récupérer le contenu de la page web intérrogée.
Quand je lance l'exécution j'ai un message de retour : Le serveur distant a
etourné une erreur : (401)Non autorisé.
Or dans le code vb de mon form1 si je clique sur l'adresse http://...... qui
apparait soulignée (le curseur se transforme en une main si je la survole)
j'obtiens bien le contenu de la réponse du serveur (un tableau d'infos).
De même si je recopie directement l'adresse dans internetexplorer tout se
passe bien je récupère aussi le tableau.

Donc je voudrais savoir ce qui provoque ce message d'erreur, il n'y a pas de
problème de login ou de mot de passe car comme je l'ai dit en tapant
directement l'adresse on obtient la réponse.
J'ai essayé avec l'adresse d'un site web quelconque et cela fonctionne
parfaitement.
Je pense qu'il y a un paramètre dans la webrequest à mettre mais lequel ou
comment en mode pas à pas savoir ce qui ne va pas ?
J'ai regardé et c'est le HttpWRequest.GetResponse qui renvoie ce message.

Voici mon code

Option Strict On
Imports System.Net
Imports System.IO

Public Class InterrogationServeurWeb
Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

Dim HttpWResponse As HttpWebResponse = Nothing
Dim sr As StreamReader = Nothing
Dim adresse As String =
"http://xx.xx.xx.xx/4DACTION/xls_calc_listingabs/site=13&plateau=130356&date1=07/08/2006&date2=07/08/2006&agence=0&salarie=0&version=10&pop=NINT&col=04,05,06,07,08,10,11,13,18,&sel=abs"
'xx.xx.xx.xx est l'adresse du serveur
Try
Dim HttpWRequest As HttpWebRequest =
CType(WebRequest.Create(adresse), HttpWebRequest)
HttpWResponse = CType(HttpWRequest.GetResponse, HttpWebResponse)
sr = New StreamReader(HttpWResponse.GetResponseStream)
RichTextBox1.Text = sr.ReadToEnd
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If Not (HttpWResponse Is Nothing) Then
HttpWResponse.Close()
End If
If Not (sr Is Nothing) Then
sr.Close()
End If
End Try

End Sub

End Class

je travaille en vb dotnet 2003 sur une application windowsform.

Merci d'avance à tous ceux qui pourront m'aider.
Cordialement
Prady92

2 réponses

Avatar
Millox Frédéric
Bonjour,

Je n'ai pas trop le temps de regarder ton bout de code mais par contre j'ai
une petite fonction qui doit faire ce que tu demandes.

Public Function GetHTTPFile(ByVal sURL As String, ByVal sFileName As String)
As Boolean
Dim webreq As System.Net.HttpWebRequest =
CType(System.Net.WebRequest.Create(sURL), System.Net.HttpWebRequest), _
webres As System.Net.WebResponse, _
oReader As System.IO.Stream, _
oFile As System.IO.Stream, _
b As Integer

Try
webres = webreq.GetResponse()

oReader = webres.GetResponseStream()
oFile = New System.IO.FileStream(sFileName,
System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite,
System.IO.FileShare.None)

While True
b = oReader.ReadByte
If b = -1 Then Exit While
oFile.WriteByte(Convert.ToByte(b))
End While

oReader.Close()
oFile.Close()

Return True
Catch ex As Exception
If Not oReader Is Nothing Then oReader.Close()
If Not oFile Is Nothing Then oFile.Close()
End Try

Return False
End Function

A+

--
fmillox


"prady92" a écrit :

Bonjour,

j'ai une windowsform avec un bouton et un contrôle richtextbox pour
récupérer le contenu de la page web intérrogée.
Quand je lance l'exécution j'ai un message de retour : Le serveur distant a
etourné une erreur : (401)Non autorisé.
Or dans le code vb de mon form1 si je clique sur l'adresse http://...... qui
apparait soulignée (le curseur se transforme en une main si je la survole)
j'obtiens bien le contenu de la réponse du serveur (un tableau d'infos).
De même si je recopie directement l'adresse dans internetexplorer tout se
passe bien je récupère aussi le tableau.

Donc je voudrais savoir ce qui provoque ce message d'erreur, il n'y a pas de
problème de login ou de mot de passe car comme je l'ai dit en tapant
directement l'adresse on obtient la réponse.
J'ai essayé avec l'adresse d'un site web quelconque et cela fonctionne
parfaitement.
Je pense qu'il y a un paramètre dans la webrequest à mettre mais lequel ou
comment en mode pas à pas savoir ce qui ne va pas ?
J'ai regardé et c'est le HttpWRequest.GetResponse qui renvoie ce message.

Voici mon code

Option Strict On
Imports System.Net
Imports System.IO

Public Class InterrogationServeurWeb
Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

Dim HttpWResponse As HttpWebResponse = Nothing
Dim sr As StreamReader = Nothing
Dim adresse As String =
"http://xx.xx.xx.xx/4DACTION/xls_calc_listingabs/site&plateau0356&date1/08/2006&date2/08/2006&agence=0&salarie=0&version&pop=NINT&col,05,06,07,08,10,11,13,18,&sel«s"
'xx.xx.xx.xx est l'adresse du serveur
Try
Dim HttpWRequest As HttpWebRequest =
CType(WebRequest.Create(adresse), HttpWebRequest)
HttpWResponse = CType(HttpWRequest.GetResponse, HttpWebResponse)
sr = New StreamReader(HttpWResponse.GetResponseStream)
RichTextBox1.Text = sr.ReadToEnd
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If Not (HttpWResponse Is Nothing) Then
HttpWResponse.Close()
End If
If Not (sr Is Nothing) Then
sr.Close()
End If
End Try

End Sub

End Class

je travaille en vb dotnet 2003 sur une application windowsform.

Merci d'avance à tous ceux qui pourront m'aider.
Cordialement
Prady92



Avatar
prady92
Merci pour ce bout de code que j'ai modifié en :
Public Function GetHTTPFile(ByVal sURL As String, ByVal sFileName As String,
Optional ByVal sLogin As String = "", Optional ByVal sMdp As String = "") As
Boolean
Dim Webrequete As HttpWebRequest = CType(Webrequete.Create(sURL),
HttpWebRequest), _
Webreponse As WebResponse, oReader As Stream, oFile As Stream, b
As Integer
Dim Authentification As New NetworkCredential(sLogin, sMdp)

Try
Webrequete.Credentials = Authentification
Webreponse = Webrequete.GetResponse()

oReader = Webreponse.GetResponseStream()
oFile = New System.IO.FileStream(sFileName,
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None)

While True
b = oReader.ReadByte
If b = -1 Then Exit While
oFile.WriteByte(Convert.ToByte(b))
End While

oReader.Close()
oFile.Close()

Return True
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If Not (Webreponse Is Nothing) Then Webreponse.Close()
If Not (oReader Is Nothing) Then oReader.Close()
If Not (oFile Is Nothing) Then oFile.Close()
End Try

Return False
End Function

et encore merci

"Millox Frédéric" a écrit :

Bonjour,

Je n'ai pas trop le temps de regarder ton bout de code mais par contre j'ai
une petite fonction qui doit faire ce que tu demandes.

Public Function GetHTTPFile(ByVal sURL As String, ByVal sFileName As String)
As Boolean
Dim webreq As System.Net.HttpWebRequest =
CType(System.Net.WebRequest.Create(sURL), System.Net.HttpWebRequest), _
webres As System.Net.WebResponse, _
oReader As System.IO.Stream, _
oFile As System.IO.Stream, _
b As Integer

Try
webres = webreq.GetResponse()

oReader = webres.GetResponseStream()
oFile = New System.IO.FileStream(sFileName,
System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite,
System.IO.FileShare.None)

While True
b = oReader.ReadByte
If b = -1 Then Exit While
oFile.WriteByte(Convert.ToByte(b))
End While

oReader.Close()
oFile.Close()

Return True
Catch ex As Exception
If Not oReader Is Nothing Then oReader.Close()
If Not oFile Is Nothing Then oFile.Close()
End Try

Return False
End Function

A+

--
fmillox


"prady92" a écrit :

> Bonjour,
>
> j'ai une windowsform avec un bouton et un contrôle richtextbox pour
> récupérer le contenu de la page web intérrogée.
> Quand je lance l'exécution j'ai un message de retour : Le serveur distant a
> etourné une erreur : (401)Non autorisé.
> Or dans le code vb de mon form1 si je clique sur l'adresse http://...... qui
> apparait soulignée (le curseur se transforme en une main si je la survole)
> j'obtiens bien le contenu de la réponse du serveur (un tableau d'infos).
> De même si je recopie directement l'adresse dans internetexplorer tout se
> passe bien je récupère aussi le tableau.
>
> Donc je voudrais savoir ce qui provoque ce message d'erreur, il n'y a pas de
> problème de login ou de mot de passe car comme je l'ai dit en tapant
> directement l'adresse on obtient la réponse.
> J'ai essayé avec l'adresse d'un site web quelconque et cela fonctionne
> parfaitement.
> Je pense qu'il y a un paramètre dans la webrequest à mettre mais lequel ou
> comment en mode pas à pas savoir ce qui ne va pas ?
> J'ai regardé et c'est le HttpWRequest.GetResponse qui renvoie ce message.
>
> Voici mon code
>
> Option Strict On
> Imports System.Net
> Imports System.IO
>
> Public Class InterrogationServeurWeb
> Inherits System.Windows.Forms.Form
>
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles Button1.Click
>
> Dim HttpWResponse As HttpWebResponse = Nothing
> Dim sr As StreamReader = Nothing
> Dim adresse As String =
> "http://xx.xx.xx.xx/4DACTION/xls_calc_listingabs/site&plateau0356&date1/08/2006&date2/08/2006&agence=0&salarie=0&version&pop=NINT&col,05,06,07,08,10,11,13,18,&sel«s"
> 'xx.xx.xx.xx est l'adresse du serveur
> Try
> Dim HttpWRequest As HttpWebRequest =
> CType(WebRequest.Create(adresse), HttpWebRequest)
> HttpWResponse = CType(HttpWRequest.GetResponse, HttpWebResponse)
> sr = New StreamReader(HttpWResponse.GetResponseStream)
> RichTextBox1.Text = sr.ReadToEnd
> Catch ex As Exception
> MessageBox.Show(ex.Message)
> Finally
> If Not (HttpWResponse Is Nothing) Then
> HttpWResponse.Close()
> End If
> If Not (sr Is Nothing) Then
> sr.Close()
> End If
> End Try
>
> End Sub
>
> End Class
>
> je travaille en vb dotnet 2003 sur une application windowsform.
>
> Merci d'avance à tous ceux qui pourront m'aider.
> Cordialement
> Prady92
>