Code archives/Networking/HTTP Post
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
An Example on how to POST Data from within Blitz to a Webserver. Tested with Blitz3D 1.88, Apache 1.3.2 and PHP 4.2.0. Unlike the GET Method, POST can be used to transfer large amounts of Data (GET is limited to the max. URL lenght), eg. Upload of Files etc. | |||||
; The following Code can be used to send Strings to a Webserver using the POST Method, ; eg. to a PHP Script that will save then in a MySQL Database, Hiscore list or whatever. ; This example works with the HTML Form element "input", that is a single line ; text input field. All other form elements are possible too, also Upload of files, tho ; the request may look slightly diffrent. ; To find out how exactly your Request has to be structured it may be the best idea to ; write a HTML Form that does the same thing you want to code in Blitz, then run a little Blitz ; TCP Server that will dump any Request to a textfile. Now you can run the Webpage Form in ; a browser, and Blitz will "monitor" what it sends to the server. You need to use "127.0.0.1" ; as the host here. Now you can investigate the dumped Request Structure easlily. ; There is one thing that took me some time until I have tracked it down: After the last ; boundary line you need to add "--". ; Of course, there must be a Script on the Webserver that will process your Data. It may be ; a good idea to make the script work for browser access until you start trying to access it ; with Blitz. (BTW. I recommend to use EasyPHP as a locally installed Webserver to develop ; PHP Scripts. In this case you can also unplug the Internet). Graphics 1000,600,32,2 ; (to make sure we can read the servers answer, in case of an error msg) Dim post$(100) ; reentrant part: ; assembling client packet: target_host$="127.0.0.1" target_port=80 target_script$="/hiscores/check_hiscore.php" ; creating a random boundary string bound_legal$="yxcvbnmasdfghjklqwertzuiopYXCVBNMASDFGHJKLQWERTZUIOP0123456789" boundary$="------------" SeedRnd(MilliSecs()) For i=0 To 21 boundary$=boundary$+Mid$(bound_legal$,Rand(1,Len(bound_legal$)),1) Next post$(0)="POST "+target_script$+" HTTP/1.1" post$(1)="User-Agent: BlitzBasic Client V0.1" post$(2)="Host: "+target_host$ post$(3)="Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*" post$(4)="Accept-Language: de, en" post$(5)="Accept-Charset: windows-1252;q=1.0, utf-8;q=1.0, utf-16;q=1.0, iso-8859-1;q=0.6, *;q=0.1" post$(6)="Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0" post$(7)="Referer: http://www.disneyland.com" post$(8)="Connection: Keep-Alive, TE" post$(9)="TE: deflate, gzip, chunked, identity, trailers" post$(10)="Content-length: ?" ; this will be set at the end of the content definition post$(11)="Content-Type: multipart/form-data; boundary="+Right$(boundary$,Len(boundary$)-2) post$(12)="" post$(13)=boundary$ post$(14)="Content-Disposition: form-data; name="+Chr$(34)+"M_Nick"+Chr$(34) post$(15)="" post$(16)="jfk" post$(17)=boundary$ post$(18)="Content-Disposition: form-data; name="+Chr$(34)+"M_Score"+Chr$(34) post$(19)="" post$(20)="77770" post$(21)=boundary$ post$(22)="Content-Disposition: form-data; name="+Chr$(34)+"M_Comment"+Chr$(34) post$(23)="" post$(24)="i am the king! well - maybe..." post$(25)=boundary$ post$(26)="Content-Disposition: form-data; name="+Chr$(34)+"M_Name"+Chr$(34) post$(27)="" post$(28)="john kennedy" post$(29)=boundary$ post$(30)="Content-Disposition: form-data; name="+Chr$(34)+"M_Street"+Chr$(34) post$(31)="" post$(32)="wallstreet 123" post$(33)=boundary$ post$(34)="Content-Disposition: form-data; name="+Chr$(34)+"M_Town"+Chr$(34) post$(35)="" post$(36)="1234567 Nirvana USA" post$(37)=boundary$ post$(38)="Content-Disposition: form-data; name="+Chr$(34)+"M_Email"+Chr$(34) post$(39)="" post$(40)="jonny@whitehouse.gov" post$(41)=boundary$ lastline=41 post$(lastline+1)="" post$(lastline+2)="" ; calulate total content lenght: clen=0 For i=12 To lastline clen=clen+Len(post$(i))+2 Next post$(10)="Content-length: "+clen ; ----------send it --------------- strmGame=OpenTCPStream(target_host$,target_port) If strmGame<>0 Then ; send request For i=0 To lastline-1 WriteLine strmGame,post$(i) Delay 1 Next WriteLine strmGame,post$(lastline)+"--" WriteLine strmGame,post$(lastline+1) WriteLine strmGame,post$(lastline+2) ; read the servers answer... While Eof(strmGame)=0 rln$=ReadLine(strmGame) Delay 1 Print rln$ Wend Print "successfully received data from sever" WaitKey() Else Print "Server failed to connect." WaitKey End If End |
Comments
| ||
Neato... This could be used for online high scores, right? |
| ||
yes. I made it for a hiscore thing, tho it still needs some more stuff, like an encryption and integrity check to prevent cheating and sabotage. |
| ||
I've been hoping for this so I don't need to write a web site admin section type thing, but rather, a nice application that looks the same everywhere and isn't subject to broken web standards :) So... I guess I could write a PHP script that just recieves strings to rewrite the various files on the web site? Any idea where a password type thing would go? Does anyone have an example script for dummies who write PHP as quickly as possible with as little knowledge as possible? |
| ||
it works the same as the sourcecode above. As you ca see in the line"Content-Disposition: form-data; name="+Chr$(34)+"M_Email"+Chr$(34) there is a form with a namuber of Input fields, one of them named M_Email. Make a HTML Form that does the job you want, then if it once works, write the blitz code that emulates the browser action. Sending a password from a HTML form is pretty simple, if you're not familar with HTML and/o PHP, there are many tutorials. |
| ||
application/x-www-form-urlencoded is the default way to encode form data. multipart/form-data is really only used for sending large quantities of binary data (i.e. web file uploads.) Also, the above code has no safeguards against part boundaries occuring in any of the data. Since all your data is hardcoded, I suppose that's academic; however, creating a random boundary string is pointless. Mr. Picklesworth: Password type thing? Are you referring to Basic Authentication, cookie-based authentication, or simply a password form field? |
Code Archives Forum