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.

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.