Remote File Engine
Community Forums/Showcase/Remote File Engine
| ||
Use the commands as you would reading local files :) Except that RemoteFileSize%(file%) can be used only on opened files. * 19.09.2006: Added Post request possibility If POSTvariables$ has a value then the request will be automatically turned into post one and the variables will be added too Example: POSTvariables$ = "name=Andres&age=18" * 20.09.2006: Added HTTP header changing You can now add cookies and stuff to header request: HTTPheader$ = "Cookie: username=my_name; password=my_pass" Also many lines of header is addable by using line break: chr(13) + chr(10) * 29.09.2006: Multi protocol Now supporting FTP protocol. Usage: file% = OpenRemoteFile%("ftp://www.domain.com/file", 21, "username", "password") * 12.10.2006: Better server detection and File info funcs Now opening TCP streams to host too. Added Some file info functions: RemoteFileName$(file%), RemoteFileCode%(bank%), RemoteFileProtocol$(bank%). If the file name is sent in header then you can receive it with RemoteFileName$(file%) because the file name isn't always in URL. Improved EORF() Any suggestion or criticism is welcome! Function list: file% = OpenRemoteFile%(url$[, port%, POSTvariables$, HTTPheader$]) CloseRemoteFile(file%) EORF(file%) RemoteFileSize%(file%) - if no size known then it's -1 RemoteFileName$(file%) RemoteFileCode%(file%) - Server response code (HTTP only) RemoteFileProtocol$(file%) ReadRemoteLine$(file%) ReadRemoteString$(file%) ReadRemoteInt%(file%) ReadRemoteShort%(file%) ReadRemoteByte%(file%) WriteRemoteBytes(file%, save%, offset%, count%) RemoteReadAvail(file%) Example: Include "transporter.bb" file% = OpenRemoteFile("http://battleempire.kylm.com/files/clip.avi") save% = WriteFile("received.avi") Graphics 400, 60, 32, 2 SetBuffer BackBuffer() While Not KeyHit(1) Cls Text 10, 10, "Downloaded: " + total% + "/" + RemoteFileSize(file%) + "(" + (Int 100 * (Float total% / RemoteFileSize(file%))) + "%)" If Not EORF(file%) N% = WriteRemoteBytes(file%, save%, 0, RemoteReadAvail(file%)) total% = total% + N% Else Text 10, 30, "FINISHED!" EndIf Flip Wend CloseFile save% CloseRemoteFile(file%) Engine to include: |
| ||
An example how to load TGA files directly from internet:Include "transporter.bb" file% = OpenRemoteFile("http://www.oat.ee/andres/oval.tga") If Not file% Then RuntimeError "Unable to open the file!" Graphics 800, 600, 32, 2 SetBuffer BackBuffer() ; Read TGA header IDLenght% = ReadRemoteByte(file%) ColorMapType% = ReadRemoteByte(file%) ImageType% = ReadRemoteByte(file%) ColorMapIndex% = ReadRemoteShort(file%) ColorMapEntries% = ReadRemoteShort(file%) ColorMapSize% = ReadRemoteByte(file%) Xhandle% = ReadRemoteShort(file%) YHandle% = ReadRemoteShort(file%) Width% = ReadRemoteShort(file%) Height% = ReadRemoteShort(file%) BPP% = ReadRemoteByte(file%) Attributes% = ReadRemoteByte(file%) ImageID$ = "" For i = 1 To IDLenght ImageID$ = ImageID$ + Chr(ReadRemoteByte(file%)) Next ; Read TGA body image% = CreateImage(Width%, Height%) LockBuffer ImageBuffer(image%) For y = 0 To Height% - 1 For x = 0 To Width% - 1 b% = ReadRemoteByte(file%) g% = ReadRemoteByte(file%) r% = ReadRemoteByte(file%) a% = ReadRemoteByte(file%) WritePixelFast x, height% - y - 1, (b% Or (g% Shl 8) Or (r% Shl 16) Or ($FF000000)), ImageBuffer(image%) Next Next UnlockBuffer ImageBuffer(image%) CloseRemoteFile(file%) ; Display the received image While Not KeyHit(1) Cls DrawImage image%, MouseX(), MouseY() Flip Wend |
| ||
Looks useful. Thanks. |
| ||
You can read blitzbasic.com's content as logged in by adding cookies:Include "transporter.bb" file% = OpenRemoteFile("http://www.blitzbasic.com/Account/_index_.php", 80, "", "Cookie: _i=user_id; _p=user_pass") If Not file% Then RuntimeError "Unable to open the file!" While Not KeyHit(1) If Not EORF(file%) Then Print ReadRemoteLine$(file%) Wend CloseRemoteFile(file%) For example my user_id is 8421 user_pass is just string of your password (or URL_Encoded if needed) |
| ||
Really useful. Could be used to update/patch things. |
| ||
Now supporting FTP protocol and debug mode :) |
| ||
Now: 1. OpenRemoteFile("http://sub.domain.com") will firstly try to connect to sub.domain.com rather than www.domain.com 2. Reads file name and some other info from HTTP header |
| ||
Cool, thanks! |