下面是我写的使用TCPSocket去请求一个网页的功能函数。看上去代码没有任何问题,执行起来也没有问题。
但是在接收数据的时候,速度非常慢,请求一个网页往往需要30秒至一分钟的时间,这让我无法接受。不知道是何原因
请重点关注:Local $r = TCPRecv($socket, 1024) 这一行。
请有Socket编程经验的高手指点。
需要补充的是,我的网速正常,使用浏览器打开网址也非常正常。 Func WebRequest($url, $method="GET", $data="")
Local $host
$tempStart = StringInStr($url, "http://")
If $tempStart = 0 Then
$tempStart = 1
Else
$tempStart += StringLen("http://")
EndIf
$tempEnd = StringInStr($url, "/", Default, Default, $tempStart)
If $tempEnd = 0 Then
$host = StringMid($url, $tempStart)
Else
$host = StringMid($url, $tempStart, $tempEnd - $tempStart)
EndIf
;ConsoleWrite($host)
; 开始 TCP 服务
TCPStartup()
Local $socket = -1
$socket = TCPConnect(TCPNameToIP($host), "80")
Local $sData = $method & " "& $url &" HTTP/1.1" & @CRLF
$sData &= "Accept: */*" & @CRLF
$sData &= "Accept-Language: zh-CN" & @CRLF
$sData &= "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2;)" & @CRLF
If $method = "POST" Then $sData &= "Content-Type: application/x-www-form-urlencoded" & @CRLF
$sData &= "Host: " & $host & @CRLF
$sData &= "Content-Length: " & StringLen($data) & @CRLF
$sData &= "Connection: Keep-Alive" & @CRLF
$sData &= "Pragma: no-cache" & @CRLF
$sData &= @CRLF
$sData &= $data
TCPSend($socket, $sData)
Local $text = ""
While 1
Local $r = TCPRecv($socket, 1024)
If @error <> 0 Then ExitLoop
If $r <> "" Then $text &= $r
WEnd
TCPCloseSocket($socket)
TCPShutdown()
Return $text
EndFunc
|