Code : Tout sélectionner
#Include <Array.au3>
#include <WinHTTP.au3>
SplashTextOn ("", "Chargement de la liste des serveurs ...", 380, 55, -1, 300, 49)
$txt = BinaryToString(InetRead("http://c.speedtest.net/speedtest-servers-static.php", 1))
SplashTextOn ("", "Tri des serveurs français ...", 380, 55, -1, 300, 49)
$a = StringRegExp($txt, '<server url="([^"]+).*?name="([^"]+).*?cc="FR.*?sponsor="([^"]+)', 3)
SplashOff()
; _ArrayDisplay($a)
$oHTTP = ObjCreate("Microsoft.XMLHTTP")
Local $bestindex, $latency = 1000
For $i = 0 to UBound($a)-1 step 3
SplashTextOn ("", " Test du serveur : " & $a[$i+1], 350, 55, -1, 300, 53)
$tmp = _test($a[$i])
If $tmp < $latency Then
$bestindex = $i
$latency = $tmp
EndIf
Next
SplashOff()
$bestserver = StringReplace($a[$bestindex], "/speedtest/upload.php", "")
$name = $a[$bestindex+1]
$sponsor = $a[$bestindex+2]
Msgbox(0,"", "meilleur serveur : " & $name & " (" & $sponsor & ")" &@crlf& $bestserver &@crlf& $latency)
;===========================================
$UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"
$s = ""
$chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
For $i = 1 to 16000
$s &= $chars
Next
$sPD = Binary($s) ; 500 Ko environ
SplashTextOn ("", "Test de débit montant ...", 380, 55, -1, 300, 49)
$upspeed = _Upld($bestserver, "speedtest/upload.php", $sPD)
Sleep(100)
SplashTextOn ("", "Test de débit descendant ...", 380, 55, -1, 300, 49)
$dwspeed = _Dwld($bestserver, "speedtest/random2500x2500.jpg") ; 12 Mo
SplashOff()
Msgbox(0,"", "descendant = " & $dwspeed &@crlf& "montant = " & $upspeed)
;=============================================
Func _Upld($server, $page, $data)
$server = StringReplace($server, "http://", "")
$hHttpOpen = _WinHttpOpen($UserAgent)
$hHttpConnect = _WinHttpConnect($hHttpOpen, $server)
$hHttpRequest = _WinHttpOpenRequest($hHttpConnect, "POST", $page)
_WinHttpSendRequest($hHttpRequest, Default, $sPD, BinaryLen($sPD))
$begin = TimerInit()
_WinHttpReceiveResponse($hHttpRequest)
$time = Floor(TimerDiff($begin) )
Global $sReturned
If _WinHttpQueryDataAvailable($hHttpRequest) Then
Do
$sReturned &= _WinHttpReadData($hHttpRequest)
Until @error
EndIf
$sHeader = _WinHttpQueryHeaders($hHttpRequest)
$size = StringLen($UserAgent) + BinaryLen($sPD) + StringLen($sHeader) + StringLen($sReturned)
_WinHttpCloseHandle($hHttpRequest)
_WinHttpCloseHandle($hHttpConnect)
_WinHttpCloseHandle($hHttpOpen)
$moysize = ($size*8)/1000
$moytime = ($time/1000)
Return Round($moysize/$moytime, 1)
EndFunc
Func _Dwld($server, $sTarget)
$server = StringReplace($server, "http://", "")
$hHttpOpen = _WinHttpOpen($UserAgent)
$hHttpConnect = _WinHttpConnect($hHttpOpen, $server)
$hHttpRequest = _WinHttpOpenRequest($hHttpConnect, "GET", $sTarget)
;_WinHttpAddRequestHeaders($hHttpRequest, $RequestHeaders)
_WinHttpSendRequest($hHttpRequest)
$begin = TimerInit()
_WinHttpReceiveResponse($hHttpRequest)
Local $bChunk, $bData = Binary(""), $hFile, $error
If _WinHttpQueryDataAvailable($hHttpRequest) Then
While 1
$bChunk = _WinHttpReadData($hHttpRequest, 2, 4096) ; binary
If @error Then ExitLoop
$bData &= $bChunk
WEnd
$time = Floor(TimerDiff($begin) )
Else
MsgBox(48, "", "erreur de connection ou d'identification")
$error = 1
EndIf
$headers = _WinHttpQueryHeaders($hHttpRequest)
$size = StringRegExp($headers, 'Content-Length\D*(\d+)', 3)[0]
$size += StringLen($headers)
$size += StringLen($UserAgent)
_WinHttpCloseHandle($hHttpRequest)
_WinHttpCloseHandle($hHttpConnect)
_WinHttpCloseHandle($hHttpOpen)
If $error = 1 Then Return "tilt"
$moysize = ($size*8)/1000
$moytime = ($time/1000)
Return Round($moysize/$moytime, 1)
EndFunc ;==>_Dwld
Func _test($url)
$oHTTP.Open("GET", $url, 0)
$begin = TimerInit()
$oHTTP.Send()
If $oHTTP.readystate = 4 Then
$time = TimerDiff($begin)
Return ($time > 150) ? 1000 : $time
EndIf
; If $oHTTP.Status = 200 Then Return ($time > 150) ? 1000 : $time
EndFunc