HTML Code zu bekommen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Xalon

Betreff: HTML Code zu bekommen

BeitragMo, Mai 02, 2005 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal ne frage,wenn ich mittels

Code: [AUSKLAPPEN]
Graphics 640,480,16,2


tcp_verbindung=OpenTCPStream("blitzforum.de",80)


WriteLine tcp_verbindung,"GET /viewforum.php?f=18 HTTP/1.1"
WriteLine tcp_verbindung,"Host:blitzforum.de"
WriteLine tcp_verbindung,"User-Agent: score"
WriteLine tcp_verbindung,"Accept: */*"
WriteLine tcp_verbindung,""




Repeat
Print ReadLine(tcp_verbindung)
WaitKey


Until KeyHit(1)


WaitKey()
End


Den HTML Code hol,sind die Daten die der Server schickt,also die gar nicht zum Code gehören immer 13 zeilen?

oder ist die Zeile vor dem HTML code IMMER 1f6f??



THX,
Xalon
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image

D2006

Administrator

BeitragMo, Mai 02, 2005 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

das ist der HTTP Header. Den schickt der Server immer mit. Sind so Infos wie Serverversion, Größe der Datei (wenn nicht dynamisch), Typ der Datei (MIME Typ) und so weiter ...

ich glaube zwischen Header und Daten ist ne Leerzeile.

MfG
D2006
 

morszeck

BeitragMo, Mai 02, 2005 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Verwende mal die SUCHE hier...

Du musst aufpassen ob du HTTP/1.1 oder HTTP/1.0 verwendest...

Bei HTTP/1.1 bleibt die Verbindung aufrecht erhalten.

Bei HTTP/1.0 wird die Verbindung nach getaner Arbeit abgebrochen.
 

David

BeitragDi, Mai 03, 2005 7:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich hab mal eine Funktion geschrieben mit der man Dateien über das HTTP Protokoll herunterladen kann. Der Header wird dabei nicht gespeichert:

BlitzBasic: [AUSKLAPPEN]

Graphics 640, 480, 32

Const FILE_NAME$ = \"http://www.google.de/index.html\"
Const DST_FILE$ = \"c:\test.htm\"
Const BUFFER_SIZE = 65536

LoadWebFile( FILE_NAME, DST_FILE )

WaitKey
End

Function LoadWebFile( srcFile$, dstFile$ )
Local TCPStream, tmpPos, dataSize, tmpBank
Local Host$ = \"\", HTTPHeader$ = \"\"
Local Buffer = BUFFER_SIZE

If ( Left( srcFile$, 7 ) = \"http://\" ) srcFile$ = Right( srcFile$, Len( srcFile$ ) - 7 )

tmpPos = Instr( srcFile$, \"/\" )

If ( tmpPos ) Then
Host$ = Left( srcFile$, tmpPos - 1 )
srcFile = Right( srcFile$, Len( srcFile ) - tmpPos + 1 )
Else
Host$ = srcFile$
srcFile$ = \"/\"
End If

TCPStream = OpenTCPStream( Host$, 80 )

If ( Not TCPStream ) Then
RuntimeError( \"Fehler beim verbinden zu: \" + Host$ )
End If

WriteLine( TCPStream, \"GET \" + srcFile$ + \" HTTP/1.1\" )
WriteLine( TCPStream, \"Host: \" + Host$ )
WriteLine( TCPStream, \"Accept: */*\" )
WriteLine( TCPStream, Chr$( 10 ) )

Repeat
HTTPHeader$ = ReadLine( TCPStream )

If ( Left( HTTPHeader$, 16 ) = \"Content-Length: \" ) Then
dataSize = Right( HTTPHeader$, Len( HTTPHeader$ ) - 16 )
End If
Until HTTPHeader$ = \"\" Or Eof( TCPStream )

If ( dataSize > 0 )
file = WriteFile( dstFile$ )
tmpBank = CreateBank( Buffer )

If ( Not file ) Then
RuntimeError( \"Fehler beim erstellen der Downloaddatei\" )
End If

bytesReaded = 0

Repeat
bytesRemaind = dataSize - bytesReaded

If ( bytesRemaind < BUFFER_SIZE ) Then
Buffer = bytesRemaind
End If

s = ReadBytes( tmpBank, TCPStream, 0, Buffer )
WriteBytes( tmpBank, file, 0, s )

bytesReaded = bytesReaded + s
Until s <> BUFFER_SIZE

CloseFile( file )
CloseTCPStream( TCPStream )
FreeBank( tmpBank )
End If
End Function


grüße

Xalon

BeitragDi, Mai 03, 2005 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ok,thx.
Wollte des nur Theoretsch wiisen,da ich dieses Programm eh in C++ schreiben werde,da diese Sprche mehr möglichkeiten bringt.


THX,
Xalon
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image
 

David

BeitragDi, Mai 03, 2005 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Warum fragst du dann hier? Rolling Eyes
Frag doch gleich in einem C++ Forum, oder in Allgemein...

grüße
 

morszeck

BeitragDi, Mai 03, 2005 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Xalon hat Folgendes geschrieben:
ok,thx.
Wollte des nur Theoretsch wiisen,da ich dieses Programm eh in C++ schreiben werde,da diese Sprche mehr möglichkeiten bringt.


THX,
Xalon


??? Du bist mir ja ein komischer... Schliesse mich meinem Vorgänger an...

Xalon

BeitragMi, Mai 04, 2005 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
1.Weil mir im C++ forum keiner geantwortet hat
2.Weil ich das programm in BB ausprobieren wollte
3.C++ is sehr umständlich darum punkt 2^^


Xalon
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image
 

Nox

BeitragMi, Mai 04, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Das ist klar. Solche Sachen stehen in den dafür vorgesehenen RFCs.
2. Gebongt. Wink
3. C++ ist nicht umständlich, C++ ist präzise:

Code: [AUSKLAPPEN]

#pragma comment(lib, "wsock32.lib")

#include <stdio.h>
#include <winsock2.h>


int main(int argc, char **argv)
{
   WSADATA         wsadata;
   SOCKET         remotesocket;
   SOCKADDR_IN      saddr;
   hostent         *host;
   char         buffer[1024*4], *html;

   if (WSAStartup(MAKEWORD(2,2), &wsadata))
      return -1;

   remotesocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (remotesocket == INVALID_SOCKET)
      return -1;


   host = gethostbyname("www.google.de");
   saddr.sin_addr = *(struct in_addr*)host->h_addr;
   saddr.sin_port = htons(80);
   saddr.sin_family = AF_INET;

   connect(remotesocket, (SOCKADDR*)&saddr, sizeof(saddr));

   memset(buffer, 0, 1024 * 4 * sizeof(char));
   sprintf(buffer, "GET / HTTP/1.1\nHost: www.google.de\nConnection: close\n\n");

   send(remotesocket, buffer, strlen(buffer), 0);
   recv(remotesocket, buffer, 1024*4 * sizeof(char), 0);
   
   html = strstr(buffer, "\r\n\r\n") + 4;
   printf("Empfangen:\n%s", html);

   closesocket(remotesocket);
   WSACleanup();

   return 0;
}


Hab für dich mal dieses Beispiel geschrieben. Sendet eine Anfrage an www.google.de, empfängt Daten und zeigt dir nur den HTML-Teil an. Weder sind im Programm enthalten Fehlerroutinen oder sonstiger Rummel. Soll nur zeigen, dass es nicht wirklich schwer ist, sowas in C++ zu realisieren. Prost. Wink

Xalon

BeitragMi, Mai 04, 2005 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß,hab schon etliche Tuts in C++/Winsock^^
>>Besucht doch mal meine Seite,mit NEUEN Tutorials<<
User posted image
 

Nox

BeitragMi, Mai 04, 2005 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich sollten dir bei...

Code: [AUSKLAPPEN]
html = strstr(buffer, "\r\n\r\n") + 4;


...die Scheuklappen vom Kopf fallen. Smile Gibt ja schließlich was ähnlich brauchbares in Blitz.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group