Bonjour, j'ai un petit soucis quand à l'utilisation de HttpClient.
Je compte faire plusieurs requêtes web, essentiellement GET et POST.
Il y a quelques années j'y arrivais sans soucis, et là j'ai voulu re faire un petit projet, seulement ça ne fonctionne plus : le programme se fige (car pas asynchrone mais je m'en fou un peu pour le coup) et me renvoie un timeout.
Là j’utilise HttpClient, qui est plus sûr que HttpWebRequest de ce que j'ai compris, car avant c'est ce que j'utilisais.
Alors problème de code ou autre, je ne sais pas trop..
J'ai essayé avec plusieurs hôtes mais tout le temps pareil.
Là le test est effectué avec youtube. Il dois m'afficher la réponse, donc le code source de la page logiquement.

Voici le code utilisé :

Code : 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
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MsgBox(WRequest("https://www.youtube.com/", "GET", ""))
    End Sub
    Function WRequest(URL As String, method As String, POSTdata As String) As String
        Dim responseData As String = String.Empty
        Try
            Dim cookieJar As New Net.CookieContainer()
            Dim hwrequest As Net.HttpWebRequest = Net.WebRequest.Create(URL)
            hwrequest.CookieContainer = cookieJar
            hwrequest.Accept = "*/*"
            hwrequest.AllowAutoRedirect = True
            hwrequest.UserAgent = "http_requester/0.1"
            hwrequest.Timeout = 600
            hwrequest.Method = method
            If hwrequest.Method = "POST" Then
                hwrequest.ContentType = "application/x-www-form-urlencoded"
                Dim encoding As New Text.ASCIIEncoding() 'Use UTF8Encoding for XML requests
                Dim postByteArray() As Byte = encoding.GetBytes(POSTdata)
                hwrequest.ContentLength = postByteArray.Length
                Dim postStream As IO.Stream = hwrequest.GetRequestStream()
                postStream.Write(postByteArray, 0, postByteArray.Length)
                postStream.Close()
            End If
            Dim hwresponse As Net.HttpWebResponse = hwrequest.GetResponse()
            If hwresponse.StatusCode = Net.HttpStatusCode.OK Then
                Dim responseStream As IO.StreamReader =
               New IO.StreamReader(hwresponse.GetResponseStream())
                responseData = responseStream.ReadToEnd()
            End If
            hwresponse.Close()
        Catch e As Exception
            responseData = "An error occurred: " & e.Message
        End Try
        Return responseData
    End Function
 
End Class

J'ai même essayé avec ce code que j'ai retrouvé sur le forum sur un de mes topics, et ça ne fonctionne pas :

Code : 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
Imports System.Net
 
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim myUrl As New Uri("https://www.youtube.com/")
        MsgBox(Get_request(myUrl))
    End Sub
 
    Private Function Get_request(ByVal url As Uri, Optional ByVal cookies As String = "", Optional ByVal proxy As String = Nothing, Optional ByVal proxyport As Integer = Nothing, Optional ByVal timeout As Integer = 30000, Optional ByVal login As String = "", Optional ByVal pass As String = "", Optional ByVal token As String = "") As String
        Dim reader As IO.StreamReader
        Try
            Dim hwebrequest As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(url)
            hwebrequest.Method = "GET"
            hwebrequest.Timeout = timeout
            If proxy <> "" Then
                Dim hproxy As WebProxy
                hproxy = New WebProxy(proxy, proxyport)
                WebRequest.DefaultWebProxy = hproxy
            End If
            Dim hwebresponse As System.Net.HttpWebResponse = hwebrequest.GetResponse
            reader = New IO.StreamReader(hwebresponse.GetResponseStream)
            Dim res As String = ""
            res = reader.ReadToEnd()
            reader.Close()
            hwebresponse.Close()
            Return res
        Catch ex As Exception
            Return ex.ToString
        End Try
    End Function
 
End Class
Cordialement,
Juaaah.