Seite 1 von 2

Anmelden auf Internetseite über Purebasic

Verfasst: 03.01.2011 13:33
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

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 03.01.2011 13:37
von NicTheQuick
Ist es eine HTAccess-Passwortabfrage oder ein einfacher Login über POST und einem Cookie?

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 03.01.2011 13:39
von amiga123
Hi

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

Gruss Amiga123

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 03.01.2011 14:06
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.

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 03.01.2011 18:49
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

Re: Anmelden auf Internetseite über Purebasic

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

HTTP |Request |Post

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 04.01.2011 13:48
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

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 04.01.2011 14:13
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

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 04.01.2011 19:07
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

Re: Anmelden auf Internetseite über Purebasic

Verfasst: 04.01.2011 20:34
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.