Automatisch einloggen bei Webgadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
P1TBULL
Beiträge: 51
Registriert: 18.03.2008 02:24

Automatisch einloggen bei Webgadget

Beitrag von P1TBULL »

Moin Moin,

ich hab ein kleines Tool geschrieben das Daten aus einer Webseite ausliest. Funktioniert auch supi, aber ich hab keine Lust mich jeden Tag einzuloggen und die Daten auszulesen deswegen möchte ich das ganze automatisieren. Ich möchte den Benutzernamen und das PW in einer txt datei speichern und beim starten des Programms an das Webgadget schicken damit sich das Programm automatisch einloggt. Aber ich finde keinen Weg die Benutzerdaten an das Webgadget zu senden. Danke schonmal für Eure Mühe!

P.S. So sieht das ganze aus:
Bild
Bild
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Brauchst du das Webgadget überhaupt? Ich nehme an wenn das ganze automatisch ablaufen soll nich, das Webgadget is nämlich in erster linie nur da um etwas zu Visualisieren...
Es wäre vll praktisch wenn du einen Link zu der Site posten würdest wo man sich einloggen muss, der einfachste weg is nämlich so zu tun als wär dein Progamm ein Browser, so kann man dann die Benutzerdaten dem Server einfach schicken (Zumindest theoretisch)

Wichtig dafür is auf jeden Fall der Quelltext der Site:
Wird per POST oder per GET geschickt?
Wie heißen die Eingabefelder?
Sind Cookies pflicht oder reicht auch eine SessionID?
(\/) (°,,,°) (\/)
P1TBULL
Beiträge: 51
Registriert: 18.03.2008 02:24

Beitrag von P1TBULL »

Hi,

die Seite ist www.comunio.de

Bisher hab ich das Webgadget nur benötigt um mich einzuloggen. Nachdem ich drin bin sehe ich die für mich wichtige News-Seite. Über den Button "Aktuelle News-Seite auswerten" wird die News-Html Datei lokal auf meinem Rechner gespeichert und die wichtigen Daten ausgelesen. Das funktioniert auch alles. Ich hab nur das Problem das ich mich immer erst von Hand einloggen muss.

LG
Bild
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Das Ganze läuft über HTTP-Post!

Code: Alles auswählen

#INTERNET_OPEN_TYPE_DIRECT = 1
#HTTP_ADDREQ_FLAG_ADD = $20000000
#HTTP_ADDREQ_FLAG_REPLACE = $80000000
#INTERNET_FLAG_SECURE = 0
#INTERNET_SERVICE_HTTP = 3
#INTERNET_DEFAULT_HTTP_PORT = 80 
#HTTP_QUERY_COOKIE = 44

Structure HttpPostStructure
  Host.s        ;holding the hostname Do Not include http:// Or any other protocol indicator here
  get_url.s     ;Everything after the hostname of the server
  post_data.s   ;the Data that should be posted
  result.s      ;holds the reviced html
EndStructure

Procedure Send_HTTP_Post(*in.HTTPPostStructure)
  Protected open_handle.i,connect_handle.i,request_handle.i,send_handle 
  Protected result.s,headers.s
  Protected bytes_read.i,ReturnStatus.i
  Protected total_read.i  = 0   
  Protected UserAgent.s   = "IDOPOST!"     
  Protected buffer.s      = Space(1024)
  
  ;InputStructure
  ; Host.s        holding the hostname Do NOT include http:// or any other protocol indicator here
  ; get_url.s     Everything after the hostname of the server
  ; result.s      Holds the result from the CGI/page
  ; post_data.s   the data that should be posted
  ; result.s      holds the reviced html
 
  Debug *in\get_url
  Debug *in\host
  Debug *in\post_data.s
 
  If *in
    open_handle = InternetOpen_(UserAgent.s,#INTERNET_OPEN_TYPE_DIRECT,"","",0)
    If open_handle
      
      connect_handle = InternetConnect_(open_handle,*in\host,#INTERNET_DEFAULT_HTTP_PORT,"","",#INTERNET_SERVICE_HTTP,0,0)
      If connect_handle
        
        request_handle = HttpOpenRequest_(connect_handle,"POST",*in\get_url,"","",0,#INTERNET_FLAG_SECURE,0)
        If request_handle
          
          headers.s = "Content-Type: application/x-www-form-urlencoded" +Chr(13)+Chr(10) 
          
          HttpAddRequestHeaders_(request_handle,headers,Len(headers), #HTTP_ADDREQ_FLAG_REPLACE | #HTTP_ADDREQ_FLAG_ADD)
          send_handle = HttpSendRequest_(request_handle,"",0,*in\post_data,Len(*in\post_data))
          
          If send_handle
         
            Repeat
             
              InternetReadFile_(request_handle,@buffer,1024,@bytes_read)
              result + Left(buffer,bytes_read)
              buffer = Space(1024)
             
            Until bytes_read=0
            
            *in\result.s = result.s
            
            ReturnStatus = #True
            
          Else
            ReturnStatus = -3
          EndIf
        Else
          ReturnStatus = -2
        EndIf
      Else
        ReturnStatus = -1
      EndIf
    Else  
      ReturnStatus = 0  
    EndIf
  Else
    ReturnStatus = 0  
  EndIf
  
  If ReturnStatus < 0 Or ReturnStatus = #True
    InternetCloseHandle_(open_handle)
  EndIf
  
  ProcedureReturn ReturnStatus
  
  ;- uncomment the following when you want to get the cookie data - not sure if it works or not.....
  ;buffer.s = Space(#MAX_PATH)
  ;headernum = 0
  ;length = Len(buffer)
  ;HttpQueryInfo_(request_handle, #HTTP_QUERY_COOKIE, @buffer, @length, @headernum)
  ;Debug buffer
 
 
EndProcedure




UserName.s = "User"
Password.s = "PWD"


;Testing
 Define HttpPostStructure.HttpPostStructure
   HttpPostStructure\host.s      = "www.comunio.de"
   HttpPostStructure\get_url.s   = "login.phtml"
   HttpPostStructure\post_data.s = "login="+UserName.s+"&pass="+Password.s+"&action=login&%3E%3E+Login_x=%3E%3E+Login"
 
 Debug Send_HTTP_Post(@HTTPPostStructure)
 Debug HttpPostStructure\result.s
habs nicht weiter getestet; will mich da nicht Registrieren.
Ich habe keine Lösung, aber ich bewundere das Problem.
P1TBULL
Beiträge: 51
Registriert: 18.03.2008 02:24

Beitrag von P1TBULL »

Vielen Dank schonmal für deine Antwort, ich versteh aber leider gar nicht was da passiert. Kannst du mir das vielleicht etwas erläutern bzw. mir erklären wie ich damit an die html Datei gelange die nach dem Login Prozess geladen wird?

LG

P.S. so habe ich die Html-Datei die nach dem Login geladen wird auf lokal gespeichert um sie danach auszuwerten:

url.s = GetGadgetText(Webgadget)
URLDownloadToFile(url.s,getappdir()+"comunio.html")

Wenn Dir das hilft würde ich Dir auch über PN meine Login Daten zukommen lassen!
Bild
Benutzeravatar
Deluxe0321
Beiträge: 336
Registriert: 19.05.2006 00:31
Kontaktdaten:

Beitrag von Deluxe0321 »

Code: Alles auswählen

;unter dem bestehendem Code einfuegen
 If OpenWindow(0,0,0,500,300,"BLA!",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  WebGadget(0,0,0,500,300,"")
  
  ;zeigen wir das zeug halt mal an ;)
  SetGadgetItemText(0,#PB_Web_HtmlCode,HttpPostStructure\result.s)
  While WindowEvent() : Wend
 EndIf
 
 Repeat
 Until WaitWindowEvent() = #PB_Event_CloseWindow
Gruß Marv
Ich habe keine Lösung, aber ich bewundere das Problem.
P1TBULL
Beiträge: 51
Registriert: 18.03.2008 02:24

Beitrag von P1TBULL »

Ah :mrgreen: Manchmal steh ich total auf dem Schlauch! Super Vielen Dank!!!!! :allright:
Bild
Antworten