Code archives/Networking/XMLHttpRequest
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
XMLHttpRequest Provides GET and POST functions that submit a GET or POST request to a Web Server and return a string representing the entire response. This includes the response header and the body. XMLHttpRequest.GET( Url:String , Args:String[]=Null) XMLHttpRequest.POST( Url:String , Args:String[]) EXAMPLE: Print XMLHttpRequest.GET("http://www.google.com") The example above would print the response header, and the HTML-Source of http://www.google.com. The parameters of a GET or POST request are passed in as an Array of Strings. This array is optional for the GET function. POST requests are sent as "x-www-form-urlencoded" values. So you can't send files. Arguments in each array are automatically escaped. So, the value "hello world" escapes to "hello%20world". There are some additional examples below and in the provided code sample. Example: Include "XMLHttpRequest.bmx" Print XMLHttpRequest.GET("http://www.google.com") Print XMLHttpRequest.GET("http://www.blitzbasic.co.nz/Community/topics.php", ["forum","112"]) Print XMLHttpRequest.POST("http://www.spencerjobe.com/test/test_post.php",["test","Results"]) | |||||
Rem FILE: XMLHttpRequest.bmx INFO: Contains a static Type that provides GET and POST functions to access web sites. Results are returned as strings EX: XMLHttpRequest.GET("http://www.google.com") XMLHttpRequest.GET("http://www.blitzbasic.co.nz/Community/topics.php", ["forum","112"]) XMLHttpRequest.POST("http://www.spencerjobe.com/test/test_post.php",["test","Results"]) End Rem Type XMLHttpRequest Function GET:String(Url:String, Args:String[]=Null) Local Host:String = XMLHttpRequest.GetHost(Url) Local IPAddress:Int = HostIp(Host) Local Port:Int = XMLHttpRequest.GetPort(Url) Local Path:String = XMLHttpRequest.GetPath(Url) Local ArgsString:String = XMLHttpRequest.GetArgs(Args) Local TCPSocket:TSocket = CreateTCPSocket() ConnectSocket(TCPSocket,IPAddress,Port) Local Stream:TSocketStream = CreateSocketStream(TCPSocket,True) Local RequestHeader:String RequestHeader = "GET " + Path + ArgsString + " HTTP/1.0~n" RequestHeader:+ "HOST: " + Host + "~n" RequestHeader:+ "Connection: close~n" 'RequestHeader:+ "Connection: keep-alive~n" RequestHeader:+ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8~n" RequestHeader:+ "Upgrade-Insecure-Requests: 1~n" RequestHeader:+ "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36~n" 'RequestHeader:+ "Referer: http://www.blitzbasic.co.nz/Community/_index_.php~n" 'RequestHeader:+ "Accept-Encoding: gzip, deflate, sdch~n" RequestHeader:+ "Accept-Language: en-US,en;q=0.8~n" Print "REQUEST" Print RequestHeader Print "" WriteLine(Stream,RequestHeader) Local Result:String = ReadLine(Stream) Local NextLine:String = "" Local StartPos:Int = 0 Local ContentLength:Int = 0 Local ResponseText:String = "" Local BlankLineCount:Int = 0 Repeat 'Print "[RESPONSE]:" + Result If Result <> "" Then BlankLineCount = 0 Else BlankLineCount:+1 EndIf ResponseText:+ Result + "~n" If BlankLineCount > 1024 Then Exit Else Result = "" If Eof(Stream) Then Exit EndIf Result = ReadLine(Stream) EndIf Forever ResponseText = Left(ResponseText, Len(ResponseText)-BlankLineCount) CloseStream(Stream) CloseSocket(TCPSocket) Return ResponseText End Function Function POST:String(Url:String, Args:String[]) Local Host:String = XMLHttpRequest.GetHost(Url) Local IPAddress:Int = HostIp(Host) Local Port:Int = XMLHttpRequest.GetPort(Url) Local Path:String = XMLHttpRequest.GetPath(Url) Local ArgsString:String = XMLHttpRequest.GetArgs(Args,True) Local TCPSocket:TSocket = CreateTCPSocket() ConnectSocket(TCPSocket,IPAddress,Port) Local Stream:TSocketStream = CreateSocketStream(TCPSocket,True) Local PostRequest:String PostRequest= "POST " + Path + " HTTP/1.0~n" PostRequest:+ "HOST: " + Host + "~n" PostRequest:+ "Connection: close~n" PostRequest:+ "Cache-Control: Max-age=0~n" PostRequest:+ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8~n" PostRequest:+ "Origin: http://" + Host + "~n" PostRequest:+ "Upgrade-Insecure-Requests: 1~n" PostRequest:+ "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36~n" PostRequest:+ "Content-Type: application/x-www-form-urlencoded~n" PostRequest:+ "Accept-Language: en-US,en;q=0.8~n" PostRequest:+ "Content-Length:" + Len(ArgsString) + "~n" WriteLine(Stream,PostRequest) WriteLine(Stream,ArgsString) WriteLine(Stream,"") Local Result:String = ReadLine(Stream) Local NextLine:String = "" Local StartPos:Int = 0 Local ContentLength:Int = 0 Local ResponseText:String = "" Local BlankLineCount:Int = 0 Repeat If Result <> "" Then BlankLineCount = 0 Else BlankLineCount:+1 EndIf ResponseText:+ Result + "~n" If BlankLineCount > 1024 Then Exit Else Result = "" If Eof(Stream) Then Exit EndIf Result = ReadLine(Stream) EndIf Forever ResponseText = Left(ResponseText, Len(ResponseText)-BlankLineCount) CloseStream(Stream) CloseSocket(TCPSocket) Return ResponseText End Function Function RemoveHttpPrefix:String(Url:String) Local StartPos:Int = Instr(Url,"://") If StartPos > 0 Then Url = Mid(Url,StartPos+3) EndIf If Instr(Url,"/") = 0 And Instr(Url,"?") = 0 Then Url = Url + "/" EndIf Return Url End Function Function GetHost:String(Url:String) Local FirstSlash:Int = 0 Local FirstColon:Int = 0 Local FirstQMark:Int = 0 Local EndPos:Int = 0 Url = RemoveHttpPrefix(Url) FirstSlash = Instr(Url,"/") FirstColon = Instr(Url,":") FirstQMark = Instr(Url,"?") If FirstColon > 0 And FirstColon < FirstSlash Then EndPos = FirstColon - 1 ElseIf FirstQMark > 0 And FirstQMark < FirstSlash Then EndPos = FirstQMark - 1 Else EndPos = FirstSlash - 1 EndIf Return Left(Url,EndPos) End Function Function GetPort:Int(Url:String) Local FirstSlash:Int = 0 Local FirstQMark:Int = 0 Local FirstColon:Int = 0 Local PortString:String = "" Url = RemoveHttpPrefix(Url) FirstColon = Instr(Url,":") If FirstColon > 0 Then Url= Mid(Url,FirstColon+1) FirstQMark = Instr(Url,"?") FirstSlash = Instr(Url,"/") If FirstQMark > 0 And FirstQMark < FirstSlash Then PortString = Left(Url,FirstQMark-1) Else PortString = Left(Url,FirstSlash-1) EndIf Else PortString = "80" EndIf Return Int(PortString) End Function Function GetPath:String(Url:String) Local Path:String = "" Local FirstSlash:Int = 0 Local FirstQMark:Int = 0 Url = RemoveHttpPrefix(Url) FirstSlash = Instr(Url,"/") FirstQMark = Instr(Url,"?") If FirstQMark > 0 And FirstQMark < FirstSlash Then Path = "/" ElseIf FirstSlash > 0 Then Path = Mid(Url,FirstSlash, FirstQMark-FirstSlash) Else Path = "/" EndIf Return Path End Function Function GetArgs:String(Args:String[]=Null, IsPostData:Int = False) If Args = Null Then Return "" EndIf Local Index:Int = 0 Local Name:String = "" Local Value:String = "" Local ArgsString:String = "" For Index = 0 To Args.Length-1 Step 2 Name = XMLHttpRequest.EscapeString(Args[Index]) Value = XMLHttpRequest.EscapeString(Args[Index+1]) ArgsString:+ "&" + Name + "=" + Value Next ArgsString = Mid(ArgsString,2) If IsPostData Then Return ArgsString Else Return "?" + ArgsString EndIf End Function Function EscapeString:String(Value:String) Local EscapedValue:String = "" Local CharIndex:Int = 0 For CharIndex = 1 To Value.Length EscapedValue :+ GetEscapeChar(Mid(Value,CharIndex,1)) Next Return EscapedValue End Function Function GetEscapeChar:String(Char:String) Select Char Case "~t" ; Return "%09" Case "~n" ; Return "%0A" Case "~r" ; Return "%0D" Case " " ; Return "%20" Case "!" ; Return "%21" Case "~q" ; Return "%22" Case "#" ; Return "%23" Case "$" ; Return "%24" Case "%" ; Return "%25" Case "&" ; Return "%26" Case "'" ; Return "%27" Case "(" ; Return "%28" Case ")" ; Return "%29" Case "*" ; Return "%2A" Case "+" ; Return "%2B" Case "," ; Return "%2C" Case "-" ; Return "%2D" Case "." ; Return "%2E" Case "/" ; Return "%2F" Rem Case "0" ; Return "%30" Case "1" ; Return "%31" Case "2" ; Return "%32" Case "3" ; Return "%33" Case "4" ; Return "%34" Case "5" ; Return "%35" Case "6" ; Return "%36" Case "7" ; Return "%37" Case "8" ; Return "%38" Case "9" ; Return "%39" End Rem Case ":" ; Return "%3A" Case ";" ; Return "%3B" Case "<" ; Return "%3C" Case "=" ; Return "%3D" Case ">" ; Return "%3E" Case "?" ; Return "%3F" Case "@" ; Return "%40" Rem Case "A" ; Return "%41" Case "B" ; Return "%42" Case "C" ; Return "%43" Case "D" ; Return "%44" Case "E" ; Return "%45" Case "F" ; Return "%46" Case "G" ; Return "%47" Case "H" ; Return "%48" Case "I" ; Return "%49" Case "J" ; Return "%4A" Case "K" ; Return "%4B" Case "L" ; Return "%4C" Case "M" ; Return "%4D" Case "N" ; Return "%4E" Case "O" ; Return "%4F" Case "P" ; Return "%50" Case "Q" ; Return "%51" Case "R" ; Return "%52" Case "S" ; Return "%53" Case "T" ; Return "%54" Case "U" ; Return "%55" Case "V" ; Return "%56" Case "W" ; Return "%57" Case "X" ; Return "%58" Case "Y" ; Return "%59" Case "Z" ; Return "%5A" End Rem Case "[" ; Return "%5B" Case "\" ; Return "%5C" Case "]" ; Return "%5D" Case "^" ; Return "%5E" Case "_" ; Return "%5F" Case "`" ; Return "%60" Rem Case "a" ; Return "%61" Case "b" ; Return "%62" Case "c" ; Return "%63" Case "d" ; Return "%64" Case "e" ; Return "%65" Case "f" ; Return "%66" Case "g" ; Return "%67" Case "h" ; Return "%68" Case "i" ; Return "%69" Case "j" ; Return "%6A" Case "k" ; Return "%6B" Case "l" ; Return "%6C" Case "m" ; Return "%6D" Case "n" ; Return "%6E" Case "o" ; Return "%6F" Case "p" ; Return "%70" Case "q" ; Return "%71" Case "r" ; Return "%72" Case "s" ; Return "%73" Case "t" ; Return "%74" Case "u" ; Return "%75" Case "v" ; Return "%76" Case "w" ; Return "%77" Case "x" ; Return "%78" Case "y" ; Return "%79" Case "z" ; Return "%7A" End Rem Case "{" ; Return "%7B" Case "|" ; Return "%7C" Case "}" ; Return "%7D" Case "~~" ; Return "%7E" Case "¢" ; Return "%A2" Case "£" ; Return "%A3" Case "¥" ; Return "%A5" Case "|" ; Return "%A6" Case "§" ; Return "%A7" Case "«" ; Return "%AB" Case "¬" ; Return "%AC" Case "¯" ; Return "%AD" Case "º" ; Return "%B0" Case "±" ; Return "%B1" Case "ª" ; Return "%B2" Case "," ; Return "%B4" Case "µ" ; Return "%B5" Case "»" ; Return "%BB" Case "¼" ; Return "%BC" Case "½" ; Return "%BD" Case "¿" ; Return "%BF" Case "À" ; Return "%C0" Case "Á" ; Return "%C1" Case "Â" ; Return "%C2" Case "Ã" ; Return "%C3" Case "Ä" ; Return "%C4" Case "Å" ; Return "%C5" Case "Æ" ; Return "%C6" Case "Ç" ; Return "%C7" Case "È" ; Return "%C8" Case "É" ; Return "%C9" Case "Ê" ; Return "%CA" Case "Ë" ; Return "%CB" Case "Ì" ; Return "%CC" Case "Í" ; Return "%CD" Case "Î" ; Return "%CE" Case "Ï" ; Return "%CF" Case "Ð" ; Return "%D0" Case "Ñ" ; Return "%D1" Case "Ò" ; Return "%D2" Case "Ó" ; Return "%D3" Case "Ô" ; Return "%D4" Case "Õ" ; Return "%D5" Case "Ö" ; Return "%D6" Case "Ø" ; Return "%D8" Case "Ù" ; Return "%D9" Case "Ú" ; Return "%DA" Case "Û" ; Return "%DB" Case "Ü" ; Return "%DC" Case "Ý" ; Return "%DD" Case "Þ" ; Return "%DE" Case "ß" ; Return "%DF" Case "à" ; Return "%E0" Case "á" ; Return "%E1" Case "â" ; Return "%E2" Case "ã" ; Return "%E3" Case "ä" ; Return "%E4" Case "å" ; Return "%E5" Case "æ" ; Return "%E6" Case "ç" ; Return "%E7" Case "è" ; Return "%E8" Case "é" ; Return "%E9" Case "ê" ; Return "%EA" Case "ë" ; Return "%EB" Case "ì" ; Return "%EC" Case "í" ; Return "%ED" Case "î" ; Return "%EE" Case "ï" ; Return "%EF" Case "ð" ; Return "%F0" Case "ñ" ; Return "%F1" Case "ò" ; Return "%F2" Case "ó" ; Return "%F3" Case "ô" ; Return "%F4" Case "õ" ; Return "%F5" Case "ö" ; Return "%F6" Case "÷" ; Return "%F7" Case "ø" ; Return "%F8" Case "ù" ; Return "%F9" Case "ú" ; Return "%FA" Case "û" ; Return "%FB" Case "ü" ; Return "%FC" Case "ý" ; Return "%FD" Case "þ" ; Return "%FE" Case "ÿ" ; Return "%FF" Default ; If Asc(Char) = 8 Then Return "%08" Else Return Char EndIf End Select End Function End Type Print "-------------------------------------------------------------------------------------------" Print "RESPONSE From https://www.google.com?gws_rd=ssl" Print "-------------------------------------------------------------------------------------------" Print XMLHttpRequest.GET("https://www.google.com",["gws_rd","ssl"]) Print "-------------------------------------------------------------------------------------------" Print "~n~n~n" Print "-------------------------------------------------------------------------------------------" Print "RESPONSE From http://www.google.com" Print "-------------------------------------------------------------------------------------------" Print XMLHttpRequest.GET("http://www.google.com") Print "-------------------------------------------------------------------------------------------" Print "~n~n~n" Print "-------------------------------------------------------------------------------------------" Print "RESPONSE From http://www.blitzbasic.co.nz/Community/topics.php?forum=112" Print "-------------------------------------------------------------------------------------------" Print XMLHttpRequest.GET("http://www.blitzbasic.co.nz/Community/topics.php", ["forum","112"]) Print "-------------------------------------------------------------------------------------------" Print "~n~n~n" Print "-------------------------------------------------------------------------------------------" Print "RESPONSE From http://www.spencerjobe.com/test/test_post.php" Print " [x-wwww-form-urlencoded] POST_DATA[~qtest=Results~q]" Print "-------------------------------------------------------------------------------------------" Print XMLHttpRequest.POST("http://www.spencerjobe.com/test/test_post.php",["test","Results"]) Print "-------------------------------------------------------------------------------------------" Print "~n~n~n" |
Comments
None.
Code Archives Forum