Bonsoir

JE cherche à télécharger un flux XML depuis un site Http mais qui nécessite au préalable une authentification pour accéder à l'espace pro de ce site et récupérer les fichiers dispos depuis cet espace.

Or, l'authentification doit se faire sur un site A et le téléchargement se fait sur un site B à condition que je sois connecté sur A.

En gros voici mon code :
Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
        Dim strUrlA = "Http://www.AAA.fr"
 
        Dim strURLB As String = "Http://www.BBBB.fr?Filename=fichier.xml"
 
        Dim strUser As String = "toto"
 
        Dim strPWD As String = "tata"
 
        Using client As New CookieAwareWebClient
 
            Dim urlRefer As String = "https:///www.AAA.fr/authSAML/" 'ici je capte la méthode POST au moment de l''authentification dans l''outil développement FIrefox Réseau
            Dim reqparm As New Specialized.NameValueCollection
            reqparm.Add("BackURL", "/login/ConnexionConfirmationAction.do") 'avec les paramètres attendus
            reqparm.Add("appId", "3")
            reqparm.Add("ssoCas", "false")
            reqparm.Add("protocol", "")
            reqparm.Add("authRequestId", "")
            reqparm.Add("login", strUser)
            reqparm.Add("password", strPWD)
 
            client.Credentials = New NetworkCredential(strUser, strPWD, "na")
            client.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
 
            Dim responsebytes As Byte() = client.UploadValues(urlRefer, "POST", reqparm)
            Dim responsebody = Encoding.UTF8.GetString(responsebytes)
 
            ' le responsebody me dit "tu es identifié"  !!!!!! chouettte'
 
            Using fs As Stream = client.OpenRead("https://www.AAAA.fr/authSAML/login/LoginDispatchAction.do?v=3.4.3&appId=510&domain=na&backURL=Http://www.BBBB.fr?Filename=fichier.xml")  'j''ai récup cet URL via l''outil dev aussi
 
 
                Dim sr As StreamReader = New StreamReader(fs)
                Console.WriteLine(sr.ReadToEnd())   
 
 
               'au lieu de me renvoyer le flux XML, ça me renvoit un flux HTML comme le responsebody mais qui me dit cette fois  " Tu n''es pas authentifié sur AAAAA "
 
            End Using
 
        End Using

J'utilise la classe suivante :
Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Class CookieAwareWebClient
    Inherits WebClient
 
    Private cc As New CookieContainer()
    Private lastPage As String
 
    Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
        Dim R = MyBase.GetWebRequest(address)
        If TypeOf R Is HttpWebRequest Then
            With DirectCast(R, HttpWebRequest)
                .CookieContainer = cc
                If Not lastPage Is Nothing Then
                    .Referer = lastPage
                End If
            End With
        End If
        lastPage = address.ToString()
        Return R
    End Function
End Class


Donc j'ai bien compris à un moment donné dans mon WebCLient qu'il faut que j'utilise l'authentification sous forme de cookie, mais apparemment cela ne fonctionne pas.

Quelqu'un aurait une idée ?

Je vous remercie



NB : la réponse en VB ou C# cela m'est égal, n'hésitez pas