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 42 43 44 45 46 47 48 49 50 51
| Public Function requeteLancer(eType As eGP, sMethode As eMethodes, sParametres As String, ByRef sReponse As String) As Int32
'Initialisations
sReponse = String.Empty
'Construction de la requête
Dim sService As String = _adresse & sMethode.ToString
If eType = eGP.mGet AndAlso String.IsNullOrEmpty(sParametres.Trim) = False Then sService &= "?param=" & sParametres
Dim laRequete As HttpWebRequest = DirectCast(HttpWebRequest.Create(sService), HttpWebRequest)
laRequete.Timeout = 20000
'S'il y a un certificat, on l'intègre
If String.IsNullOrEmpty(_certificat) = False Then
Dim lePFX As New X509Certificate2(_pfx, _password, X509KeyStorageFlags.UserKeySet)
Dim leCER As New X509Certificate2(_certificat)
Dim leStore As New X509Store("MaBoite", StoreLocation.CurrentUser)
leStore.Open(OpenFlags.ReadWrite)
If leStore.Certificates.Contains(leCER) = False Then leStore.Add(leCER)
leStore.Close()
laRequete.ClientCertificates.Add(lePFX)
End If
'On construit la requete
laRequete.ContentType = "application/json"
laRequete.Method = "GET"
If eType = eGP.mPost Then laRequete.Method = "POST"
'On écrit les paramètres en flux, s'il y a lieu
If String.IsNullOrEmpty(sParametres.Trim) = False Then
If eType = eGP.mPost Then
Dim wriRequete As IO.StreamWriter = New IO.StreamWriter(laRequete.GetRequestStream)
wriRequete.Write(sParametres)
wriRequete.Close()
End If
End If
Dim laReponse As WebResponse = Nothing
Dim leFlux As IO.Stream = Nothing
'Et on la lance
Try
laReponse = laRequete.GetResponse() <-- C'est cet appel qui est plus ou moins lent selon le temps de validation du certificat..... ?!?!?
leFlux = laReponse.GetResponseStream
sReponse = New IO.StreamReader(leFlux).ReadToEnd
Catch ex As WebException
Dim httpReponse As HttpWebResponse = DirectCast(ex.Response, HttpWebResponse)
If leFlux Is Nothing = False Then leFlux.Flush()
If laReponse Is Nothing = False Then laReponse.Close()
If httpReponse Is Nothing = False Then Return httpReponse.StatusCode
Return 500
End Try
'Nettoyage, etc.
If leFlux Is Nothing = False Then leFlux.Flush()
If laReponse Is Nothing = False Then laReponse.Close()
laRequete = Nothing
'Si on est là, c'est que c'est bon
Return 0
End Function |
Partager