InetGetSource mit POST

    • 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
    [autoit]

    #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
    ;
    ;===============================================================================

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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, 8) <> '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

    [/autoit]

    Beispiel

    Spoiler anzeigen
    [autoit]

    #include <INETv2.au3>
    ;by GtaSpider

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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()

    [/autoit]

    Beispiel und INETv2.au3 auch im Anhang!

    Hoffe ihr findet Gebrauch dafür :)

    Mfg Spider

    Edit: HotFix

  • dein Beispielprogramm funktioniert aber nicht wenn der Server in der URL
    nicht dabeisteht...

    also wenn man statt

    [autoit]

    "http://rs255.rapidshare.com/files/110695594/cardr.rar"

    [/autoit]

    das so schreibt

    [autoit]

    "http://www.rapidshare.com/files/110695594/cardr.rar"

    [/autoit]

    Weil das Problem ist, den Server weiß man im Normalfall nicht.

    Kannst du mir vielleicht erklären warum das mit der anderen URL nicht geht?
    Und gibt es mit deiner Funktion eine Möglichkeit 2 Werte mitzugeben?

    z.B. einloggen mit Benutzername + Passwort

    hab nämlich bis jetzt noch nichts zusammengebracht ;(

    danke schonmal für deine (bestimmt) künftige Hilfe ^^

  • @ Kyler vllt. schaust dir mal auch die __IENavigate in der IE.au3 an - ist nicht in der Hilfe, aber am Ende von der IE.au3, da kannst auch POST-Daten übergeben :)

  • erstmal danke, aber...

    Ich würde mich gerne einloggen ohne meinen IE zu öffnen.
    Ich will mich irgendwie automatisch einloggen und dann mit
    z.B. inetget den Quellcode von dem angemeldeten Bereich
    auslesen.
    Nur für das einloggen möchte ich nicht unbedingt meinen IE
    öffnen.

    Wenn das nicht geht, gibts vielleicht eine Möglichkeit ein Cookie
    mit Autoit zu setzen?
    Weil dann würd ich mir das einloggen auch ersparen :D

    Bin für jede Hilfe offen und dankbar ^^

  • erstmal vielen Dank für deine Antwort :D

    ja, der Login ist leider verschlüsselt ;(

    Ich würde mich gerne in die Collector Zone und in die Premium Zone bei RS einloggen:

    URL: https://ssl.rapidshare.com/premiumzone.html

    Header:

    Spoiler anzeigen

    <head>
    <title>RapidShare: 1-Click Webhosting</title>
    <link rel="icon" href="/img2/favicon.ico" type="image/ico" />
    <link rel="SHORTCUT ICON" href="/img2/favicon.ico" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" type="text/css" href="/img2/styles.css" />
    <script type="text/javascript" src="/img2/css_dropdown.js"></script>

    </head>

    URL: https://ssl.rapidshare.com/cgi-bin/collectorszone.cgi

    Header:

    Spoiler anzeigen

    <head>
    <title>RapidShare: 1-Click Webhosting</title>
    <link rel="icon" href="/img2/favicon.ico" type="image/ico" />
    <link rel="SHORTCUT ICON" href="/img2/favicon.ico" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link rel="stylesheet" type="text/css" href="/img2/styles.css" />
    <script type="text/javascript" src="/img2/css_dropdown.js"></script>

    </head>

  • Nein, der HTTP-Header wird benötogt, nicht der HTML-Head
    Aber HTTPS ist noch nicht möglich. Also weiter mit _IE Funktionen arbeiten.
    Aber CryptLoad ist immer noch die Beste Lösung :)

  • ok, danke jedenfalls...

    aber wieso kommt ihr auf Cryptload ?!

    Warum sollte ich ein Programm schreiben um mich in meinen Account einzuloggen
    und dann meine Daten herunter zu laden...

    Das ergibt keinen Sinn ^^
    Dann wäre Cryptload eine Alternative, obwohl ich eigentlich Fan vom RSD bin.

    Ich wollte meine Links managen.
    Aber wenns nicht geht kann man auch nix machen.

  • Code
    HTTP/1.x 200 OK
    Date: Mon, 21 Jul 2008 18:29:53 GMT
    Connection: close
    Content-Type: application/octet-stream
    Accept-Ranges: bytes
    content-disposition: Attachment; filename=test.rar
    Content-Length: 104857600

    schreibt er mir in die datei wie krieg ich das mit dem attachment geregelt?

  • Hallo Leute,

    Ich habe trotzdem noch nicht ganz verstanden wann ich die Funktion einsetze.

    Kann mir mal jemand ein normales Beispiel nennen.
    Das mit dem Rapidshar sacht mir nix.

  • du bekommst den Quelltext von einer Seite zurück, die du mit einem POST-Inhalt aufgerufen hast

  • So ganz versteh ich nicht, warum es mit cURL funktioniert, aber mit AutoIP nicht!?

    wenn ich z.B. etwas in mein gästebuch posten möchte, funktioniert das so nicht:

    [autoit]


    $Posten =("author=Jens%20M&email=jensW21@web.de&url=http://www.test.com&comment=Das%20geht%20so%20nicht&comment_post_ID=3&comment_parent=0")
    _INetGetSourcePost("http://eckfrau.wordpress.com/wp-comments-post.php",$Posten)

    [/autoit]

    Wo ist der Fehler ?

  • Guten Morgen,

    vielen Dank für diese tolle Funktion.
    Es wäre toll, wenn auch noch der Port über die URL übergeben werden kann.
    Ich denke, dass man, in der Zeile bevor TCPStartup steht, mit String-Split ein kleines Array mit IP und Port erzeugen könnte. In den HTTP-Header muss der Port nicht eingebaut werden oder?

    LG FKFK