- Offizieller Beitrag
Hallo liebe AutoItler
Ihr kennt ja alle die Funktion _InetGetSource. Es gibt nur 2 kleine nachteile:
1. Man brauch eine DLL, die zwar in Windows ist, aber trozdem könnte es ja mal sein, dass sie nicht da ist
Und 2. Man kann kein POST(php) übergeben. Man kann zwar in der Beta einen Header angeben, dass ist aber mühselig und funktioniert auch nur selten.
Also hab ich mich rangemacht und eine eigene Funktion geschrieben namens _InetGetSourcePost (Ihr kennt mich ja, wie immer sehr kreativ^^)
Außerdem empfängt man mit meiner Version, den Sorucecode ($aReturn[1]) und den BackHeader ($aReturn[0])!
INETv2.au3
Spoiler anzeigen
#include-once
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
;
; Function Name: _INetGetSourcePost()
; Description: Gets the source from an URL without writing a temp file and you can send a Post.
; Parameter(s): $sURL = The URL of the site.
; $sPost = The Post to send
; Requirement(s): -
; Return Value(s): On Success - Return a array with $aReturn[0] = Backheader and $aReturn[1] = Sourcecode
; On Failure - 0 and sets @ERROR
; @error = 1: Post or URL is nothing
; @error = 2: Error by RegularExpression
; @error = 3: $sHost or $sHttp1 is nothing
; @error = 4: Can not get IP of Host
; @error = 5: Can not connect to host
; @error = 6: Nothing can be send
; @error = 7: Connection abborted while receiving
; Author(s): GtaSpider
;
;===============================================================================
Func _INetGetSourcePost($sURL, $sPost)
Local $iSocket, $sHeader, $sRecv, $iIP, $sHost, $aRegExp, $sHttp1,$iErr,$iSend,$aReturn[2]
If $sURL = '' Or $sPost = '' Then Return SetError(1, 0, 0)
If StringLeft($sURL, 7) <> 'http://' And StringLeft($sURL, <> 'https://' Then $sURL = "http://" & $sURL
If StringRight($sURL, 1) <> "/" Then $sURL &= "/"
$aRegExp = StringRegExp($sURL, "http?://(.*?)/", 3)
If @error Then Return SetError(2, 0, 0)
$sHost = $aRegExp[0]
If $sHost = '' Then Return SetError(3, 0, 0)
$sHttp1 = StringTrimLeft($sURL,StringInStr($sURL,"/",-1,3)-1)
If $sHttp1 = '' Then Return SetError(3, 0, 0)
$sHeader = "POST " & $sHttp1 & " HTTP/1.1" & @CRLF & _
"Host: " & $sHost & @CRLF & _
"User-Agent: AutoIt v3" & @CRLF & _
"Content-Length: " & StringLen($sPost) & @CRLF & @CRLF & $sPost
TCPStartup() ;If not already done
$iIP = TCPNameToIP($sHost)
If $iIP = '' Or StringInStr($iIP, ".") = 0 Then Return SetError(4, 0, 0)
$iSocket = TCPConnect($iIP, 80)
If @error Or $iSocket < 0 Then Return SetError(5, 0, 0)
$iSend = TCPSend($iSocket, $sHeader)
If @error Or $iSend < 1 Then Return SetError(6, 0, 0)
While 1
$sRecv = TCPRecv($iSocket, 1024)
$iErr = @error
If $sRecv <> '' Then
While 1
$sRecv &= TCPRecv($iSocket, 1024)
If @error Then ExitLoop 2
WEnd
EndIf
If $iErr Then Return SetError(7,0,0)
WEnd
$aReturn[0] = StringLeft($sRecv,StringInStr($sRecv,@CRLF&@CRLF)-1)
$aReturn[1] = StringTrimLeft($sRecv,StringLen($aReturn[0])+4)
Return $aReturn
EndFunc ;==>_INetGetSourcePost
Beispiel
Spoiler anzeigen
#include <INETv2.au3>
;by GtaSpider
SplashTextOn("","Downloading...",200,20,-1,-1,1)
$aSource = _INetGetSourcePost("http://rs255.rapidshare.com/files/110695594/cardr.rar","dl.start=Free")
If @error Then Exit MsgBox(16,"","Error: "&@error)
FileWrite("TestFile.html",$aSource[1])
RunWait('"' & @ComSpec & '" /c "'&@ScriptDir&'\TestFile.html"', '', @SW_HIDE)
SplashOff()
Beispiel und INETv2.au3 auch im Anhang!
Hoffe ihr findet Gebrauch dafür
Mfg Spider
Edit: HotFix