Code archives/Networking/HTTP Poster
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Ever needed to post many posts at a time on a website? Here's the solution. Just fill in the header caps and then variable names and their contents and finally press "Start". This app supports only POST method posting. | |||||
Global MainWindow = CreateWindow("HTTP Poster", ClientWidth(Desktop()) / 2 - 250 / 2, ClientHeight(Desktop()) / 2 - 430 / 2, 250, 430, Desktop(), 1) AppTitle "HTTP Poster" Global Stream = False Global Progress = False Global Post$ = "" Global tries = 0 Global VariableCount = 16 Dim PostData(VariableCount, 4) Global Timer = CreateTimer(1000) CreateLabel("Server:", 5, 8, 40, 15, MainWindow) Global ServerField = CreateTextField(45, 5, 100, 20, MainWindow) CreateLabel("Port:", 160, 8, 25, 15, MainWindow) Global PortField = CreateTextField(185, 5, ClientWidth(MainWindow) - 190, 20, MainWindow) CreateLabel("URL:", 5, 33, 30, 15, MainWindow) Global URLField = CreateTextField(45, 30, ClientWidth(MainWindow) - 50, 20, MainWindow) CreateLabel("Host:", 5, 58, 30, 15, MainWindow) Global HostField = CreateTextField(45, 55, ClientWidth(MainWindow) - 50, 20, MainWindow) CreateLabel("Header:", 5, 83, 38, 15, MainWindow) Global HeaderField = CreateTextArea(45, 80, ClientWidth(MainWindow) - 50, 32, MainWindow, 1) CreateLabel("Delay:", 5, 118, 30, 15, MainWindow) Global DelayField = CreateTextField(45, 116, 50, 20, MainWindow) CreateLabel("Count:", 110, 118, 30, 15, MainWindow) Global CountField = CreateTextField(145, 116, 50, 20, MainWindow) Global ProgressLabel = CreateLabel("Progress...", 5, ClientHeight(MainWindow) - 24, ClientWidth(MainWindow) - 65, 18, MainWindow, 3) CreateLabel("Post data:", 5, 145, 50, 15, MainWindow) PostPanel = CreatePanel(5, 160, ClientWidth(MainWindow) - 10, ClientHeight(MainWindow) - 190, MainWindow, 1) Global Slider = CreateSlider(ClientWidth(PostPanel) - 18, 0, 18, ClientHeight(PostPanel), PostPanel, 2) For i = 0 To VariableCount - 1 PostData(i, 1) = CreateLabel("Var #" + (i + 1) + ":", 5, 8 + i * 62, 50, 15, PostPanel) PostData(i, 2) = CreateTextField(55, 5 + i * 62, 100, 20, PostPanel) PostData(i, 3) = CreateLabel("Content:", 5, 33 + i * 62, 50, 15, PostPanel) PostData(i, 4) = CreateTextArea(55, 30 + i * 62, 150, 32, PostPanel, 1) Next Global Button = CreateButton("Start", ClientWidth(MainWindow) - 55, ClientHeight(MainWindow) - 25, 50, 20, MainWindow) SetSliderRange Slider, ClientHeight(PostPanel), VariableCount * 62 + 10 SetGadgetText PortField, "80" SetGadgetText DelayField, "500" SetGadgetText CountField, "100" Repeat Events(50) If Progress If tries < Int(TextFieldText(CountField)) If TimerTicks(Timer) => Int(TextFieldText(DelayField)) If Not Eof(Stream) WriteLine Stream, Post$ tries = tries + 1 SetGadgetText ProgressLabel, "Try: " + tries + "/" + TextFieldText(CountField) + " Sent: " + ConvertBytes(tries * (Len(Post$) + 2)) ;Clear buffer avail = ReadAvail(Stream) For i = 1 To avail:ReadByte(Stream):Next Else Progress = False StartProgress() EndIf ResetTimer Timer EndIf Else Progress = False StartProgress() EndIf EndIf Forever Function Events(wait) Select WaitEvent(wait) Case $401 Select EventSource() Case Slider For i = 0 To VariableCount - 1 y = SliderValue(Slider) SetGadgetShape PostData(i, 1), 5, 8 + i * 62 - y, 50, 15 SetGadgetShape PostData(i, 2), 55, 5 + i * 62 - y, 100, 20 SetGadgetShape PostData(i, 3), 5, 33 + i * 62 - y, 50, 15 SetGadgetShape PostData(i, 4), 55, 30 + i * 62 - y, 150, 32 Next Case Button Progress = 1 - Progress StartProgress() End Select Case $803 FreeGadget MainWindow End End Select End Function Function StartProgress() If progress Stream = OpenTCPStream(TextFieldText(ServerField), TextFieldText(PortField)) If Stream DisableGadget ServerField DisableGadget PortField DisableGadget URLField DisableGadget HostField DisableGadget HeaderField DisableGadget DelayField DisableGadget CountField For i = 0 To VariableCount - 1 DisableGadget PostData(i, 2) DisableGadget PostData(i, 4) Next SetGadgetText Button, "Stop" tries = 0 sent = 0 PostLine$ = "" For i = 0 To VariableCount - 1 If Not TextFieldText(PostData(i, 2)) = "" If Len(PostLine$) > 0 Then PostLine$ = PostLine$ + "&" PostLine$ = PostLine$ + WebCompatible(TextFieldText(PostData(i, 2))) + "=" + WebCompatible(TextAreaText(PostData(i, 4))) EndIf Next Post$ = "POST " + TextFieldText(URLField) + " HTTP/1.1" + Chr(13) + Chr(10) Post$ = Post$ + "Host: " + TextFieldText(HostField) + Chr(13) + Chr(10) Post$ = Post$ + "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" + Chr(13) + Chr(10) If Right$(TextAreaText(HeaderField), 2) = Chr(13) + Chr(10) Then Post$ = Post$ + TextAreaText(HeaderField) Else Post$ = Post$ + TextAreaText(HeaderField) + Chr(13) + Chr(10) Post$ = Post$ + "Content-Length: " + Len(PostLine$) + Chr(13) + Chr(10) Post$ = Post$ + "Content-Type: application/x-www-form-urlencoded" + Chr(13) + Chr(10) Post$ = Post$ + "Connection: Keep-Alive" + Chr(13) + Chr(10) Post$ = Post$ + Chr(13) + Chr(10) Post$ = Post$ + PostLine$ Else Notify "Unable to connect to " + TextFieldText(ServerField) + ":" + TextFieldText(PortField) Progress = False EndIf Else EnableGadget ServerField EnableGadget PortField EnableGadget URLField EnableGadget HostField EnableGadget HeaderField EnableGadget DelayField EnableGadget CountField For i = 0 To VariableCount - 1 EnableGadget PostData(i, 2) EnableGadget PostData(i, 4) Next SetGadgetText Button, "Start" If Stream CloseTCPStream Stream Stream = False EndIf End Function Function WebCompatible$(address$) For i = 1 To Len(address$) char = Asc(Mid$(address$, i, 1)) If Encode(char) result$ = result$ + "%" + Right$(Hex(char), 2) Else result$ = result$ + Chr(char) EndIf Next Return result$ End Function Function Encode(code) If code =< 31 Or code => 127 Then Return True Select code Case 36, 38, 43, 44, 47, 58, 59, 61, 63, 64, 32, 91, 93 Return True Case 34, 60, 35, 37, 123, 125, 124, 92, 94, 126, 96 Return True Default Return False End Select End Function Function ConvertBytes$(bytes) If bytes > 1024^2 txt$ = Int(Float bytes / 1024^2) + " MB" ElseIf bytes > 1024 txt$ = Int(Float bytes / 1024) + " KB" Else txt$ = bytes + " B" EndIf Return txt$ End Function |
Comments
None.
Code Archives Forum