Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Files herunterladen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 29.06.2016, 11:44    Titel: Files herunterladen Antworten mit Zitat

Hallo liebe Internet - Experten! lächeln

Wenn ich in meinen Programmen irgend etwas im HTTP - Format brauche, verwende ich zum Herunterladen die Funktionen aus Websites selbst verarbeiten.

Mit html - Text funktioniert das auch ganz wunderbar, wenn ich allerdings versuche, eine Datei herunterzuladen, etwa
    http://videos.classic-car.tv/Wellenlager_SD.mp4

bekomme ich einen String mit dem Inhalt
Zitat:
HTTP/1.1 200 OK
Date: Sun, 26 Jun 2016 07:22:10 GMT
Server: Apache
Last-Modified: Wed, 03 Jul 2013 22:00:00 GMT
ETag: "1a2b0d-8f532d-4e0a2953d7800"
Accept-Ranges: bytes
Content-Length: 9392941
Connection: close
Content-Type: video/mp4
gefolgt von knapp 253 kB Daten, in denen ich nichts erkennen kann. Die angegebene Filegröße stimmt jedenfalls.

Wie bringe ich den Server dazu, mir die gewünschte Datei zu schicken? Sowohl mit libvlc als auch mit libcurl hat der Download schon geklappt, aber ich würde gerne auf die zusätzlichen dlls verzichten.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 29.06.2016, 14:11    Titel: Antworten mit Zitat

Die gewünschte Datei sollte dir eigentlich mit den 253kB Daten bereits geschickt worden sein. Was passiert, wenn du diese Daten in eine neue Datei "Wellenlager_SD.mp4" speicherst? Laut dem, was ich vor einem paar Jahren in meinem Buch geschrieben habe, sollte das funktionieren ... durchgeknallt
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 29.06.2016, 21:39    Titel: Antworten mit Zitat

Zitat:
gefolgt von knapp 253 kB Daten, in denen ich nichts erkennen kann. Die angegebene Filegröße stimmt jedenfalls.
Das ist für eine MP4-Datei relativ normal. lächeln
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 30.06.2016, 01:38    Titel: Antworten mit Zitat

Ich fürchte, da habe ich mich etwas missverständlich ausgedrückt. Die richtige, komplette, abspielbare mp4 - Datei, die ich mit libvlc und libcurl schon erfolgreich heruntergeladen habe, ist 9392941 Bytes groß, so wie es auch im Header angezeigt wird.

Ich habe auch beide Dateien in einen Hex - Editor geladen und nach gemeinsamen Mustern gesucht, aber keine Übereinstimmung gefunden, und auch der VLC - Player kann mit den 253 kB Daten nichts anfangen.

@nemored: Ich nehme an, du meinst "2D Spieleprogrammierung", Kapitel 13. Auf den ersten Blick scheint es genau das gleiche zu sein, was ich auch versucht habe, aber ich werde es mir noch einmal genauer ansehen.

Falls mich das nicht weiterbringen sollte: Wie kann ich mich in die Ausgabe von libvlc oder libcurl einklinken um zu protokollieren, was diese an den Server schicken, um die Datei anzufordern?

Gruß
grindstone

EDIT:

Ich habe den Fehler gefunden. In der httpget werden die empfangenen Daten in einen ZString gepuffert. Das ist bei Texten kein Problem, aber bei einem beliebigen Datenstrom, in dem auch 0 - Bytes auftauchen...

Also habe ich den ZString durch einen allozierten Speicherbereich ersetzt, dessen Inhalt ich nach jedem Schleifendurchlauf an den Ausgabestring anhänge und siehe: es funktioniert (zumindest im Prinzip). Jetzt muß ich nur noch den Header entfernen und den Code ein bisschen aufräumen...

Aber nicht jetzt, ich habe schon ganz eckige Augen. Ich brauch nen Kaffee...
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
micha



Anmeldungsdatum: 09.12.2005
Beiträge: 72

BeitragVerfasst am: 30.06.2016, 11:43    Titel: Antworten mit Zitat

Das geht auch ohne lib (SNC englisches Forum) !

micha
Code:
' [S]imple [N]etwork [C]onnection
#include once "snc.bi"
#include once "snc_utility.bi"

' test of a client connection
const as string ServerName = "videos.classic-car.tv"
const as string ServerPath = "/"
const as string ServerFile = "Wellenlager_SD.mp4"
const as string FileType   = "video/mp4"

' connect to web server at port 80
dim as NetworkClient client=type(ServerName,80)

' get a connection from ConnectionFactory
var connection = client.GetConnection()

' build an HTTP GET request
dim as string request = HTTPGet(ServerName,ServerPath & ServerFile,FileType)

' ready to send ?
while connection->CanPut()<>1 : sleep 100 : wend
' put data on the connection
connection->PutData(strptr(request),len(request))

' ready to receive ?
while connection->CanGet()<>1 : sleep 100 : wend

print "please wait receive ~9MB data ..."
dim as zstring ptr buffer
var nBytes = connection->GetData(buffer)
print "number of received bytes " & nBytes

' get last char position of the HTTP asci header
var LastChar=instr(*buffer,HeaderEnd)-1
var Header  =left(*buffer,LastChar)

' is it a OK answer ?
if instr(Header,"200 OK")<1 then
  print "can't get " & ServerName & ServerPath & ServerFile & " !"
  beep:sleep:end
end if

' get first byte behind the HTTP header
var DataStart=LastChar+4

' save it
open ServerFile for binary access write as #1
  dim as ubyte ptr FileBuffer=@buffer[DataStart]
  nBytes-=DataStart
  put #1,,*FileBuffer,nBytes
close #1
print "file saved ..."

' free the buffer (allocate by snc.bi)
deallocate buffer
sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 01.07.2016, 01:12    Titel: Antworten mit Zitat

Hallo micha!

Danke für den Codeschnipsel. lächeln Leider kann ich ihn im Augenblick nicht ausprobieren, da ich die snc.bi nicht hierhabe und freebasic.net momentan nicht erreichbar ist. Ich werde das später nochmal probieren.

Ich arbeite gerade an der Headererkennung ("Ja oder nein und wenn ja, was will uns der Server damit sagen?"), da nehme ich deine Überprüfung des Statuscodes gerne als Anregung.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 01.07.2016, 12:04    Titel: Re: Files herunterladen Antworten mit Zitat

grindstone hat Folgendes geschrieben:
mit libcurl hat der Download schon geklappt, aber ich würde gerne auf die zusätzlichen dlls verzichten.

grindstone hat Folgendes geschrieben:
arbeite gerade an der Headererkennung ("Ja oder nein und wenn ja, was will uns der Server damit sagen?")

Übrigens, das wird spätestens dann spaßig, wenn der Website-Betreiber mal auf https umstellt. durchgeknallt

Wenn die Software nur unter Windows funktionieren muss, kann man ja auch das WinAPI für HTTP(S)-Downloads benutzen und muss nicht von der Transportschicht aus einen eigenen HTTP-Client implementieren. lächeln Dann braucht man auch keine zusätzlichen DLLs.
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 01.07.2016, 12:20    Titel: Antworten mit Zitat

So, ich habe den Code jetzt so modifiziert, daß er mit beliebigen Daten klarkommt.

Als Empfangspuffer kann man ohne weiteres einen ZString verwenden, die Daten werden dort komplett 1:1 hineingeschrieben. Nur wenn man ihn dann als String weiterverwendet, ist beim erste 0 - Byte Schluss. Dieses Problem kann man umgehen, indem man einen "normalen" String entsprechender Länge erzeugt und den Inhalt dort hineinkopiert.

Außerdem habe ich die Subs noch um die Möglichkeit einer optionalen Callback - Routine erweitert, mit der eine Fortschrittsanzeige und eine Abbruchabfrage realisiert werden kann.

Wenn einer von euch so nett wäre, das Ganze auch unter Linux zu testen... lächeln

HTTP.bi
Code:
#Ifdef __FB_WIN32__
#Include Once "win/winsock2.bi"
#Else
#Include Once "crt/netdb.bi"
#Include Once "crt/sys/socket.bi"
#Include Once "crt/netinet/in.bi"
#Include Once "crt/arpa/inet.bi"
#Include Once "crt/unistd.bi"
#EndIf

#Ifndef recvbufflen
#define RECVBUFFLEN 16384
#EndIf
#Ifndef newline
#define newline Chr(13,10)
#EndIf

Sub InitWinsock Constructor
   #Ifdef __FB_WIN32__
   '' init winsock
   Dim wsaData As WSAData
   If( WSAStartup( MAKEWORD( 1, 1 ), @wsaData ) <> 0 ) Then
      Print "Error: WSAStartup failed"
      End 1
   End If
   #EndIf
End Sub

Sub ExitWinsock Destructor
   #Ifdef __FB_WIN32__
   WSACleanup
   #EndIf
End Sub

Function httpget(server As String, path As String, hadd As String = "", callback As Any Ptr = 0) As String
   Dim IP As Integer
   Dim ia As in_addr
   Dim s As SOCKET
   Dim hostentry As hostent Ptr
   Dim sendbuffer As String
   Dim recvbuffer As ZString * RECVBUFFLEN+1
   Dim bufstr As String
   Dim bytes As Integer
   Dim sa As sockaddr_in
   Dim in As String
   
   Dim As Integer totlen, cpos, headerlen
   Dim As String ctype
   
   'optionale callbackroutine zur fortschrittsanzeige
   Dim cb As Function (totlen As Integer, heruntergeladen As Integer) As Integer
   
   ia.S_addr = inet_addr( server )
   If ( ia.S_addr = INADDR_NONE ) Then
      hostentry = gethostbyname( server )
      If ( hostentry = 0 ) Then
         Return "Error: IP couldn't be resolved!"
      End If
      IP = *Cast( Integer Ptr, *hostentry->h_addr_list )
   Else
      IP = ia.S_addr
   End If
   s = OpenSocket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
   If( s = 0 ) Then
      Return "Error: Socket couldn't be opened."
   End If
   sa.sin_port         = htons( 80 )
   sa.sin_family       = AF_INET
   sa.sin_addr.S_addr  = ip
   If ( connect( s, Cast( PSOCKADDR, @sa ), Len( sa )) = SOCKET_ERROR ) Then
      closesocket( s )
      Return "Error: Couldn't connect to host"
   End If
   sendBuffer = "GET /" + path + " HTTP/1.0" + NEWLINE + _
   "Host: " + server + NEWLINE + _
   "Connection: close" + NEWLINE + _
   hadd + _
   NEWLINE
   If( send( s, sendBuffer, Len( sendBuffer ), 0 ) = SOCKET_ERROR ) Then
      closesocket( s )
      Return "Error: Couldn't send request"
   End If
   Do
      bytes = recv( s, recvBuffer, RECVBUFFLEN, 0 )
      If( bytes <= 0 ) Then
         Exit Do
      End If
      recvbuffer[bytes] = 0
      If (Len(in) = 0) AndAlso (Left(recvbuffer,4) = "HTTP") AndAlso (InStr(recvbuffer,"200 OK")) Then 'nur beim ersten schleifendurchlauf prüfen
         cpos = InStr(recvbuffer,"Content-Type:")
         If cpos Then
            ctype = Mid(recvbuffer,cpos + 14,InStr(cpos,recvbuffer,"/") - cpos - 14)
         EndIf
         cpos = InStr(recvbuffer,"Content-Length:")
         If cpos Then
            totlen = Val(Mid(recvbuffer,cpos + 16))
         EndIf
         headerlen = InStr(recvbuffer,Chr(13,10,13,10)) + 3
      EndIf
      
      bufstr = Space(bytes)
      For x As Integer = 0 To bytes - 1
         bufstr[x] = recvbuffer[x]
      Next
      
      in += bufstr
      If callback Then
         cb = callback
         If cb(totlen, Len(in) - headerlen) Then
            Exit Do 'download abbrechen
         EndIf
      EndIf
   Loop
   
   If ctype <> "text" Then 'header entfernen
      in = Mid(in, headerlen + 1)
   EndIf
   
   shutdown( s, 2 )
   closesocket( s )
   Return in
End Function

Function httppost(server As String, path As String, toPost As String, hadd As String = "", callback As Any Ptr = 0) As String
   Dim IP As Integer
   Dim ia As in_addr
   Dim s As SOCKET
   Dim hostentry As hostent Ptr
   Dim sendbuffer As String
   Dim recvbuffer As ZString * RECVBUFFLEN+1
   Dim bufstr As String
   Dim bytes As Integer
   Dim sa As sockaddr_in
   Dim in As String

   Dim As Integer totlen, cpos, headerlen
   Dim As String ctype
   
   'optionale callbackroutine zur fortschrittsanzeige
   Dim cb As Function (totlen As Integer, heruntergeladen As Integer) As Integer
   
   ia.S_addr = inet_addr( server )
   If ( ia.S_addr = INADDR_NONE ) Then
      hostentry = gethostbyname( server )
      If ( hostentry = 0 ) Then
         Return "IP couldn't be resolved!"
      End If
      IP = *Cast( Integer Ptr, *hostentry->h_addr_list )
   Else
      IP = ia.S_addr
   End If
   s = OpenSocket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
   If( s = 0 ) Then
      Return "Socket couldn't be opened."
   End If
   sa.sin_port         = htons( 80 )
   sa.sin_family       = AF_INET
   sa.sin_addr.S_addr  = ip
   If ( connect( s, Cast( PSOCKADDR, @sa ), Len( sa )) = SOCKET_ERROR ) Then
      closesocket( s )
      Return "Couldn't connect to host"
   End If
   sendBuffer = "POST /" + path + " HTTP/1.0" + NEWLINE + _
   "Host: " + server + NEWLINE + _
   "Content-Type: application/x-www-form-urlencoded" + NEWLINE + _
   "Content-Length: " + Str(Len(toPost)) + NEWLINE + _
   "Connection: close" + NEWLINE + _
   hadd + _
   NEWLINE + _
   toPost + NEWLINE
   If( send( s, sendBuffer, Len( sendBuffer ), 0 ) = SOCKET_ERROR ) Then
      closesocket( s )
      Return "Couldn't send request"
   End If
   Do
      bytes = recv( s, recvBuffer, RECVBUFFLEN, 0 )
      If( bytes <= 0 ) Then
         Exit Do
      End If
      recvbuffer[bytes] = 0
      If (Len(in) = 0) AndAlso (Left(recvbuffer,4) = "HTTP") AndAlso (InStr(recvbuffer,"200 OK")) Then 'nur beim ersten schleifendurchlauf prüfen
         cpos = InStr(recvbuffer,"Content-Type:")
         If cpos Then
            ctype = Mid(recvbuffer,cpos + 14,InStr(cpos,recvbuffer,"/") - cpos - 14)
         EndIf
         cpos = InStr(recvbuffer,"Content-Length:")
         If cpos Then
            totlen = Val(Mid(recvbuffer,cpos + 16))
         EndIf
         headerlen = InStr(recvbuffer,Chr(13,10,13,10)) + 3
      EndIf
      
      bufstr = Space(bytes)
      For x As Integer = 0 To bytes - 1
         bufstr[x] = recvbuffer[x]
      Next
      
      in += bufstr
      If callback Then
         cb = callback
         If cb(totlen, Len(in) - headerlen) Then
            Exit Do 'download abbrechen
         EndIf
      EndIf
   Loop
   
   If ctype <> "text" Then 'header entfernen
      in = Mid(in, headerlen + 1)
   EndIf
   
   shutdown( s, 2 )
   closesocket( s )
   Return in
End Function

Testprogramm:
Code:
#Include "HTTP.bi"

Function download_callback(gesamtlaenge As Integer, heruntergeladen As Integer) As Integer
   
   Print "   gesamtlaenge ";gesamtlaenge
   Print "heruntergeladen ";heruntergeladen
   Print "                ";Int(100 * heruntergeladen / gesamtlaenge);"% (Abbrechen mit ESC)"
   If heruntergeladen < gesamtlaenge Then
      Locate CsrLin -3,1,0
   EndIf
   
   If InKey = Chr(27) Then
      Return 1
   EndIf
   
   Return 0
End Function         
         
Dim As String inhalt = httpget("videos.classic-car.tv","Wellenlager_SD.mp4",,@download_callback)
'Dim As String inhalt = httppost("videos.classic-car.tv","Wellenlager_SD.mp4","",,@download_callback)

Open "test.mp4" For Output As #1
Print #1, inhalt;
Close
Print "OK"

Sleep


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 01.07.2016, 12:28    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Übrigens, das wird spätestens dann spaßig, wenn der Website-Betreiber mal auf https umstellt.
Das wäre jetzt meine nächste Frage gewesen... grinsen

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 01.07.2016, 12:45    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Das wäre jetzt meine nächste Frage gewesen... grinsen

Wenn das auch ohne Lib und WinAPI funktionieren sollte, müsstest du mehr oder weniger bloß den TLS-Standard und SNI implementieren: https://www.ietf.org/rfc/rfc5246.txt lachen

Oder du fragst ThePuppetMaster; der codet solche Sachen manchmal in 1...2 Nächten runter. durchgeknallt
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 01.07.2016, 13:08    Titel: Antworten mit Zitat

Ich fühle mich gerade wie Sokrates: "Ich weiß, daß ich nichts weiß" grinsen

Mit der Verwendung der WinAPI hätte ich kein Problem, das habe ich ja auf jeden Fall hier auf dem Rechner, und die Bindings sind im FB - Paket drin. Und bei Linux kann ich sowieso nicht mitreden.

Eigentlich besteht ja auch gar keine Notwendigkeit, da selber etwas zu schreiben. Die Subs von PMedia sind halt so schön kompakt, und ich muß keine dlls mitschleppen.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 21.07.2016, 23:30    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Oder du fragst ThePuppetMaster; der codet solche Sachen manchmal in 1...2 Nächten runter. durchgeknallt
Daran hab ich mich in der tat schonmal versucht, ist allerdings relativ umfangreich, wenn man 1. platformunabhängigkeit gewährleisten will, und 2. das ganze halbwegs einfach realisieren möchte.


Bezüglich HTTP Download: https://www.freebasic-portal.de/porticula/test-http-getbas-802.html (Kann sowohl in eine Datei als auch in eine Variable herunter laden)

@grindstone
Deine Variante ist ansich OK, könnte allerdings einige Probleme erzeugen.
Ich führe einfach mal ein paar Punkte auf. Bitte nicht zu kritisch betrachten Zunge rausstrecken

* RECVBUFFLEN ist eigentlich zu groß. Diese sollte dem Paket entsprechend 7936 Byte groß sein.

* Wenn du 'HTTP/1.0' nutzt, solltest du auch in der auswertugn auf 1.0 prüfen.

* wenn du nicht "select" nutzt, dann wirkt sich die funktion blockierend aus. Das Heist, das deine App ebenfalls blockiert (Nicht Assynchron). Das kann bei schlechten verbindugnen oder "doofen" Servers dazu führen, das du extrem lange eine blockierte anwendung hast, die du nur via KILL -n 9 (linux) abtöten kannst.

* du prüft im recvbuffer auf "200 OK" via instr. Angenommen, du hast ein HTTP 206 oder ähnliches, dann wird 1. deine abfrage warscheinlich nicht erfolgreich verlaufen und / oder 2. könnte ein im Header enthaltender Text "200 OK" ebenfalls fehlerhaftes verhalten auslösen.
Du solltest hier die erste zeile mit dem crlf abtrennen, und NUR in dieser danach suchen. Das minimiert zumindest "angriffe" oder "fehlferhalten".

* das 'ctype' sollte ge'trim't werden, da nach dem : eines header-parameter auch leerzeichen zulässig sind.

* content-length sollte auch "Byte" geprüft werden.

* im POST solltest du im 'Content-Type' einen anderen typ als 'application/x-www-form-urlencoded' nutzen. AUSER, du hast auch daten, die als form-urlencoded vorliegen. Alternative wären octetstream Arten.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 23.07.2016, 10:46    Titel: Antworten mit Zitat

Vielen Dank für die Hinweise, ich werde sie bei nächster Gelegenheit in meinen Code einarbeiten. Aber ich denke, auf lange Sicht werde ich wohl an TSNE nicht vorbeikommen, wenn ich eine Open Source - Lösung haben möchte (möchte ich natürlich lächeln ).

Gruß
grindstone

EDIT:
Kann ich aus der Formulierung
Zitat:
Daran hab ich mich in der tat schonmal versucht
schließen, daß TSNE aktuell kein https verarbeiten kann?
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 23.07.2016, 16:00    Titel: TLS oberhalb TCP Antworten mit Zitat

Hallo!
grindstone hat Folgendes geschrieben:
EDIT:
Kann ich aus der Formulierung
Zitat:
Daran hab ich mich in der tat schonmal versucht
schließen, daß TSNE aktuell kein https verarbeiten kann?

Ja. - Sonst sähe die Bibliothek vom Umfang her auch ziemlich anders aus. lächeln

TSNE hat keine Funktionen für TLS, worauf HTTPS dann im nächsten Schritt aufbauen würde.

Du könntest dir aber natürlich selber eine Crypto-Bibliothek in FB schreiben, die TLS bietet, und dann mit Hilfe von TSNE und deiner eigenen Lib HTTPS implementieren.

TSNE ermöglicht dir u.a. den einfachen Umgang mit TCP-Sockets in FreeBASIC. Darüber könnte man dann natürlich auch verschlüsselte Daten austauschen und nicht nur unverschlüsselte. TSNE stellt dir sozusagen ein Rohrpost-Rohr von einer Anwendung auf System A zur anderen auf System A oder auch B bereit. Was du durchleitest (offen lesbare Postkarten oder Briefe mit verschlüsseltem Text), ist dir selber überlassen. lächeln Wenn du etwas Verschlüsseltes durchschicken willst oder sicherstellen willst, dass am anderen Ende des Rohres der sitzt, den du da erwartest, musst du dich selber um Mechanismen dafür kümmern.

Wikipedia hat Folgendes geschrieben:
Im OSI-Modell ist TLS in Schicht 5 (der Sitzungsschicht) angeordnet. Im TCP/IP Modell ist TLS oberhalb der Transportschicht (zum Beispiel TCP) und unterhalb Anwendungsprotokollen wie HTTP oder SMTP angesiedelt.


In dem Wikipedia-Artikel zu TLS kann man das in der Abbildung/Tabelle oben rechts gut sehen.
TSNE hilft dir auf der Transportschicht-Ebene. Die Verschlüsselung ist eine logische Ebene höher angesiedelt. Und oberhalb der Verschlüsselung kommt dann die Anwendungsebene, also HTTP, SMTP, ...

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 24.07.2016, 10:58    Titel: Antworten mit Zitat

Vielen Dank, scheint ja doch etwas komplizierter zu sein. traurig

Könnte man sich nicht -nur mal so als Idee- beispielsweise in Firefox einklinken und den die Zertifizierungs- und Entschlüsselungsarbeit machen lassen?

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 24.07.2016, 12:41    Titel: curl Antworten mit Zitat

Vermutlich kann man den Firefox zu einem gewissen Grad per Kommandozeilen-Optionen steuern, aber eigentlich gibt es für das Problem ja extra fertige Bibliotheken und Tools. lächeln

cURL bzw. libcurl (Open Source: https://curl.haxx.se/docs/copyright.html) kann "out of the box" mit verschiedenen verschlüsselten Protokollen, insb. HTTPS, umgehen. Dazu nutzt es eine Verschlüsselungsbibliothek wie OpenSSL. Es scheint aber auch zu anderen Crypto-Libs kompatibel zu sein: https://curl.haxx.se/docs/ssl-compared.html
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz