Guest User

HTTP request

a guest
Feb 17th, 2014
741
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Procedure.s HttpRequest(URL.s, ReturnType = 1, PostData.s = "", Cookie.s = "", User_agent.s = "", Referer.s = "", File_to_download.s = "", Proxy.s = "", Timeout.l = 1000, Redirect.b = #True)
  2.  
  3.   ;{ Format URL
  4.  
  5.   If FindString(URL, "https://", 1, #PB_String_NoCase)
  6.     Is_secure.b = #True
  7.   EndIf
  8.   URL = RemoveString(URL, "https://", #PB_String_NoCase)
  9.   URL = RemoveString(URL, "http://", #PB_String_NoCase)
  10.   Host.s = StringField(URL, 1, "/")
  11.   Page.s = RemoveString(URL, host, #PB_String_NoCase)  
  12.   Page.s = RTrim(Page, "/")
  13.  
  14.   ;}
  15.  
  16.   ;{ Add headers
  17.  
  18.   If Not Proxy = "" : Access_type.i = 3 : Else : Access_type.i = 1 : EndIf
  19.   If User_agent = "" : User_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" : EndIf
  20.   Open_handle = InternetOpen_(User_agent, Access_type, Proxy, "", 0)
  21.   InternetSetOption_(Open_handle, 2, @Timeout, 4)
  22.   InternetSetOption_(Open_handle, 5, @Timeout, 4) ; #INTERNET_OPTION_SEND_TIMEOUT
  23.   InternetSetOption_(Open_handle, 6, @Timeout, 4) ; #INTERNET_OPTION_RECEIVE_TIMEOUT
  24.   InternetSetOption_(Open_handle, 7, @Timeout, 4) ; #INTERNET_OPTION_DATA_SEND_TIMEOUT
  25.   InternetSetOption_(Open_handle, 8, @Timeout, 4) ; #INTERNET_OPTION_DATA_RECEIVE_TIMEOUT
  26.   If Is_secure : Port.i = 443 : Flag.l = $00800000|$00001000|$00002000|$00080000|$00000100|$04000000
  27.     Else : Port.i = 80 : Flag.l = $00080000|$00000100|$04000000 : EndIf
  28.   If Not Redirect : Flag|$00200000 : EndIf
  29.   If Not PostData = "" : Verb.s = "POST" : Else : Verb.s = "GET" : EndIf
  30.   If Page = "" : Page = "/" : EndIf
  31.   Connect_handle = InternetConnect_(Open_handle, Host, Port, "", "", 3, 0, 0)
  32.   Request_handle = HttpOpenRequest_(Connect_handle, Verb, Page, "", Referer, 0, Flag, 0)
  33.   If Verb = "POST"
  34.     Headers.s = "Content-Type: application/x-www-form-urlencoded" + Chr(13) + Chr(10)
  35.     HttpAddRequestHeaders_(Request_handle, Headers, Len(Headers), $80000000|$20000000)
  36.   EndIf
  37.   If Not Cookie = ""
  38.     Headers.s = "Cookie: " + Cookie + Chr(13) + Chr(10)
  39.     HttpAddRequestHeaders_(Request_handle, Headers, Len(Headers), $80000000|$20000000)
  40.   EndIf
  41.  
  42.   ;}
  43.  
  44.   ;{ Send request
  45.  
  46.   If #PB_Compiler_Unicode  
  47.     *PostDataAnsi = AllocateMemory(StringByteLength(PostData, #PB_Ascii) + 1)
  48.     PokeS(*PostDataAnsi, PostData, -1, #PB_Ascii)
  49.     Send_handle = HttpSendRequest_(Request_handle, "", 0, *PostDataAnsi, StringByteLength(PostData, #PB_Ascii))
  50.     FreeMemory(*PostDataAnsi)
  51.   Else
  52.     Send_handle = HttpSendRequest_(Request_handle, "", 0, PostData, Len(PostData))  
  53.   EndIf
  54.  
  55.   ;}
  56.  
  57.   ;{ Receive response
  58.  
  59.   If ReturnType = 1 ; Return server response content
  60.     Buffer.s = Space(1024)  
  61.     Repeat
  62.       InternetReadFile_(Request_handle, @Buffer, 1024, @Bytes_read.l)
  63.       Result.s + Left(PeekS(@Buffer,-1,#PB_Ascii), Bytes_read)
  64.       Buffer = Space(1024)
  65.     Until Bytes_read = 0  
  66.    
  67.   ElseIf  ReturnType = 2; Return Cookie(s)
  68.     For i = 0 To 9
  69.       Buffer.s = Space(1024)
  70.       Headernum = i
  71.       Length = Len(Buffer)
  72.       If HttpQueryInfo_(Request_handle, 43, @Buffer, @Length, @Headernum)
  73.         Result.s +  Buffer  + #CRLF$  
  74.       EndIf  
  75.     Next
  76.    
  77.   ElseIf  ReturnType = 3; Return both
  78.     For i = 0 To 9
  79.       Buffer.s = Space(1024)
  80.       Headernum = i
  81.       Length = Len(Buffer)
  82.       If HttpQueryInfo_(Request_handle, 43, @Buffer, @Length, @Headernum)
  83.         Result.s +  Buffer  + #CRLF$  
  84.       EndIf  
  85.     Next
  86.     Result + #CRLF$
  87.     Buffer.s = Space(1024)  
  88.     Repeat
  89.       InternetReadFile_(Request_handle, @Buffer, 1024, @Bytes_read.l)
  90.       Result.s + Left(PeekS(@Buffer,-1,#PB_Ascii), Bytes_read)
  91.       Buffer = Space(1024)
  92.     Until Bytes_read = 0  
  93.    
  94.   ElseIf  ReturnType = 4; Download file
  95.    
  96.     If File_to_download <> ""
  97.       Filehandle = CreateFile(#PB_Any, File_to_download)
  98.       fBytes.l = 0
  99.       Loop.b = 1
  100.       fBuffer = AllocateMemory(4096)
  101.       Repeat
  102.         InternetReadFile_(Request_handle, fBuffer, 4096, @Bytes_read.l)
  103.         If Bytes_read = 0
  104.           Loop = 0
  105.         Else
  106.           fBytes = fBytes + Bytes_read
  107.           WriteData(Filehandle, fBuffer, Bytes_read)          
  108.         EndIf
  109.       Until Loop = 0
  110.       CloseFile(Filehandle)
  111.       Result = Str(FileSize(File_to_download))
  112.     Else
  113.       Result = ""
  114.     EndIf
  115.    
  116.   ElseIf ReturnType = 5 ; return redirected URl + cookies
  117.    
  118.     For i = 0 To 9
  119.       Buffer.s = Space(1024)
  120.       Headernum = i
  121.       Length = Len(Buffer)
  122.       If HttpQueryInfo_(Request_handle, 43, @Buffer, @Length, @Headernum)
  123.         Result.s +  Buffer  + #CRLF$  
  124.       EndIf  
  125.     Next
  126.  
  127.    
  128.     Buffer.s = Space(#MAX_PATH)
  129.     Headernum = 0
  130.     Length = Len(Buffer)  
  131.     If HttpQueryInfo_(Request_handle, 33, @Buffer, @Length, @Headernum)    
  132.       Result = Buffer + #CRLF$ + Result
  133.     EndIf      
  134.    
  135.   EndIf
  136.  
  137.   ;}
  138.  
  139.   ;{ Close handle
  140.  
  141.   InternetCloseHandle_(Open_handle)
  142.   InternetCloseHandle_(Connect_handle)
  143.   InternetCloseHandle_(Request_handle)
  144.   InternetCloseHandle_(Send_handle)
  145.   Delay(70)  
  146.  
  147.   ;}  
  148.  
  149.   ProcedureReturn Result
  150.  
  151. EndProcedure
Advertisement
Add Comment
Please, Sign In to add comment