Anmelden auf Internetseite über Purebasic

Anfängerfragen zum Programmieren mit PureBasic.
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Anmelden auf Internetseite über Purebasic

Beitrag von amiga123 »

Hallo

Ich bin auf der Suche nach einer Möglichkeit mich im Internet auf einer Seite automatisch anmelden zu können.
Ziel ist es verschiedene Internetseiten mit Purebasic auszulesen.

Das Problem: (xyx.de ist natürlich fake, nur als Beispiel)

Die Seite:www.xyx.de/x/demo.htm liegt auf einem mit Passwort geschützen Html Server. Wenn ich Seite mit Purebasic über ReceiveHTTPFile auslesen will komme ich natürlich nicht auf die Seite weil die
Passwortabfrage zwischengeschaltet ist.
Das Passwort ist vorhanden. Mann kann die Startseite http://www.xyx.de aufrufen, doch hier ist die Passwortanfrage drinn. Gibt es eine Möglichkeit mit Purbasic ein Passwort an die Seite zu senden??

mfg. Amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Anmelden auf Internetseite über Purebasic

Beitrag von NicTheQuick »

Ist es eine HTAccess-Passwortabfrage oder ein einfacher Login über POST und einem Cookie?
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Re: Anmelden auf Internetseite über Purebasic

Beitrag von amiga123 »

Hi

Bin mir nicht sicher, aber ich glaube Post und Cookie.

Gruss Amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Anmelden auf Internetseite über Purebasic

Beitrag von NicTheQuick »

Dazu musst du natürlich erst mal herausfinden, welche Daten gesendet werden müssen, damit ein erfolgreicher Login stattfinden kann. Wenn du das hast, findest du hier im Forum genügend Codes, die dir eine Seite per POST herunterladen können. Ich habe nur keine Lust einen derartigen Thread jetzt zu suchen.
Als Rückgabe eines solchen Requests wird dann der Cookie mitgeliefert, den du dir für die Session aufheben musst und bei jedem weiteren GET oder POST mitsenden musst.
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Re: Anmelden auf Internetseite über Purebasic

Beitrag von amiga123 »

Danke dir

Habe das passende gefunden. Wenn man weiß wonach man suchen muss, findet man es auch.

http://www.purebasic.fr/german/viewtopi ... =webgadget

Gruß Amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Benutzeravatar
Tur0k
Beiträge: 187
Registriert: 16.02.2009 21:41
Computerausstattung: 4.00 GB RAM, 2x 2.20Ghz, 340GB+500GB

Re: Anmelden auf Internetseite über Purebasic

Beitrag von Tur0k »

Hatte mal die Frage auch gestellt, und folgendes hat mir geholfen:
http://www.purebasic.fr/german/viewtopi ... 12#p263212

HTTP |Request |Post
buuh* :D
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Re: Anmelden auf Internetseite über Purebasic

Beitrag von amiga123 »

Hallo
Also mit dem Anmelden klappt das jetzt wunderbar.

Ich habe aber noch folgendes Problem. Wenn ich die folgenden Adresse öffne geht das über Webgadget einwandfrei.

Link:"http://192.168.1.168/plant_current.htm? ... 0TL-5000TL"

Versuche ich das ganze über

Code: Alles auswählen

 
If ReceiveHTTPFile("http://192.168.1.168/plant_current.htm?DevKey=WR34MS03:1100106490&DevClass=Sunny%20Boy%203300TL-5000TL", Filename$)
      Debug "gefunden"
      Else
      Debug "nicht gefunden"
EndIf
Geht es nicht. Ich schätze mal es liegt an den Parametern nach dem .htm. Wird nur "http://192.168.1.168/plant_current.htm" eingegeben kommen schon Daten allerdings nicht die richtigen.
Gibt es eine Möglichkeit doch noch an die Daten zu kommen. ???

Gruss Amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Anmelden auf Internetseite über Purebasic

Beitrag von Kiffi »

amiga123 hat geschrieben:

Code: Alles auswählen

If ReceiveHTTPFile("http://192.168.1.168/plant_current.htm?DevKey=WR34MS03:1100106490&DevClass=Sunny%20Boy%203300TL-5000TL", Filename$)
tausch mal den Doppelpunkt nach WR34MS03 durch %3A aus:

Code: Alles auswählen

If ReceiveHTTPFile("http://192.168.1.168/plant_current.htm?DevKey=WR34MS03%3A1100106490&DevClass=Sunny%20Boy%203300TL-5000TL", Filename$)
Grüße ... Kiffi
a²+b²=mc²
amiga123
Beiträge: 88
Registriert: 17.02.2009 18:05

Re: Anmelden auf Internetseite über Purebasic

Beitrag von amiga123 »

Danke Kiffi

Das war das Problem. :allright: Leider habe ich mich mit dem Login zu früh gefreut. Das geht immer noch nicht richtig. Ich komme immer auf der Startseite raus. Wenn ich mich mit dem Firefox einloggen gehen jetzt allerdings mit dem Login auch die gesperrten Seite. Sobald über den Firefox ausgeloggt , sind die gesperrten Seiten wieder zu. Seltsam ??? :(

Habe mal den Quellcode der Loginseite angehängt und den geänderten Muster Purebasic Code.

HTML Seite:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
	<head>
		
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Sunny WebBox</title>
		<link href="css/style.css" type="text/css" rel="stylesheet">
		<link href="css/home.css" type="text/css" rel="stylesheet">
		<script type="text/javascript">
		<!--
			top.frames[2].location.reload();								  
		-->			
		</script>	
		<script type="text/javascript" src="script/json.js"></script>

		<script type="text/javascript" src="script/prototype.js"></script>
		<script type="text/javascript" src="script/traffic.js"></script>
		<script type="text/javascript" src="script/home.js"></script>

		<script type="text/javascript">
		<!--
			function checkFrameset()
			{
				if(self.parent.name != "mainFrame")
				{
					top.location = "index.html";
				}
			}
		-->
		</script>
		
	</head>
	<body>

		<script type="text/javascript">
		<!--
			checkFrameset();
 		-->
		</script>
		<table class="home-layout-table" id="Table1">
			<tr>
				<td align="center" class="tdcol0">
					<img src="image/webbox.gif" alt="SunnyWebBox">
				</td>
				<td class="tdcol1">
					<table id="OvTbl" class="home-overview-table">

						<tr class="evenrow">
							<td class="tdcol0">Leistung:</td>
							<td id="Power" class="tdcol1">0 W</td>
						</tr>
						<tr class="oddrow">
							<td class="tdcol0">Tagesertrag:</td>
							<td id="DailyYield" class="tdcol1">0 Wh</td>

						</tr>
						<tr class="evenrow">
							<td class="tdcol0">Gesamtertrag:</td>
							<td id="TotalYield" class="tdcol1">23,34 MWh</td>
						</tr>
					</table>
					<form action="login" target="mainFrame" method="post">

						<table class="home-control-table" id="Table3">
					      <tr>
						      <td class="tdcol0">Sprache:</td>
						      <td class="tdcol1" colspan="2"><select name="Language" size="1">
<option Value="cs">Čeština </option>
<option Value="de" selected>Deutsch </option>
<option Value="en">English </option>
<option Value="es">Español </option>

<option Value="fr">Français </option>
<option Value="it">Italiano </option>
<option Value="nl">Nederlands </option>
<option Value="pt">Português </option>
<option Value="el">Ελληνικά </option>
<option Value="ko">한국어 </option>
</select>
</td>
					      </tr>
					      <tr>

						      <td height="5px"></td>
					      </tr>
							<tr>
								<td class="tdcol0">Passwort:</td>
								<td class="tdcol1"><input name="Password" class="input-text" type="password" size="32"></td>
							</tr>
							<tr>
						      <td></td>

								<td class="buttonrow"><input name="ButtonLogin" Value="Anmelden" class="input-submit" type="submit" size="8"></td>
							</tr>
							<tr>
								<td class="messagerow" colspan="2"></td>
							</tr>
						</table>
					</form>
				</td>
			</tr>

		</table>
	</body>
</html>

Purebasic Musterquellcode geändert.

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




UserName.s = ""
Password.s = "sma"

; UserName wird nicht benötigt. auch index.html ist nicht nötig.

;Testing
Define HttpPostStructure.HttpPostStructure
HttpPostStructure\Host.s      = "192.168.1.168"
HttpPostStructure\get_url.s   = ""
Debug "Login 0"
HttpPostStructure\post_data.s = "Password="+Password.s+"&action=login&%3E%3E+Login" ;

;Orginal Login
;HttpPostStructure\post_data.s = "login="+UserName.s+"&pass="+Password.s+"&action=login&%3E%3E+Login_x=%3E%3E+Login"


Delay(1000)

ip$="http://192.168.1.168/plant_devices_treefrm.htm"

;- Geräte auslesen "http://192.168.1.168/plant_devices_treefrm.htm"


Filename$="c:\Testseite.html"

If ReceiveHTTPFile(ip$, Filename$)
  Debug "gefunden"
  Debug "gefunden"
Else
  Debug "nicht gefunden"
EndIf

If ReadFile(0, "c:\webbox.txt")   ; wenn die Datei geöffnet werden konnte, setzen wir fort...
        While Eof(0) = 0           ; sich wiederholende Schleife bis das Ende der Datei ("end of file") erreicht ist
          a$ = ReadString(0)     ; Zeile für Zeile im Debugger-Fenster anzeigen
Debug a$
          finde = FindString(a$, "Power", 1)
          If finde > 0
            x        = FindString (a$, ">", 1)
            y        = FindString (a$, "<", x + 1)
            aktuell$ = Mid(a$, x + 1, ((y - 1) - x))
          EndIf
        Wend
      EndIf
 
Vielleicht weiß von euch jemand woran es liegen könnte.

Gruß Amiga123
Pure Basic 4.60 Vollversion
http://www.Sundisp.de
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Anmelden auf Internetseite über Purebasic

Beitrag von edel »

Soweit wie ich das sehe, fehlt dir die Cookieverarbeitung. Nach dem Login bekommst du,
per header nen Cookie mit den Daten, diese musst du immer zurueck senden, sonst weist
dich der Server ab.
Antworten