Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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)
- ;{ Format URL
- If FindString(URL, "https://", 1, #PB_String_NoCase)
- Is_secure.b = #True
- EndIf
- URL = RemoveString(URL, "https://", #PB_String_NoCase)
- URL = RemoveString(URL, "http://", #PB_String_NoCase)
- Host.s = StringField(URL, 1, "/")
- Page.s = RemoveString(URL, host, #PB_String_NoCase)
- Page.s = RTrim(Page, "/")
- ;}
- ;{ Add headers
- If Not Proxy = "" : Access_type.i = 3 : Else : Access_type.i = 1 : EndIf
- If User_agent = "" : User_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" : EndIf
- Open_handle = InternetOpen_(User_agent, Access_type, Proxy, "", 0)
- InternetSetOption_(Open_handle, 2, @Timeout, 4)
- InternetSetOption_(Open_handle, 5, @Timeout, 4) ; #INTERNET_OPTION_SEND_TIMEOUT
- InternetSetOption_(Open_handle, 6, @Timeout, 4) ; #INTERNET_OPTION_RECEIVE_TIMEOUT
- InternetSetOption_(Open_handle, 7, @Timeout, 4) ; #INTERNET_OPTION_DATA_SEND_TIMEOUT
- InternetSetOption_(Open_handle, 8, @Timeout, 4) ; #INTERNET_OPTION_DATA_RECEIVE_TIMEOUT
- If Is_secure : Port.i = 443 : Flag.l = $00800000|$00001000|$00002000|$00080000|$00000100|$04000000
- Else : Port.i = 80 : Flag.l = $00080000|$00000100|$04000000 : EndIf
- If Not Redirect : Flag|$00200000 : EndIf
- If Not PostData = "" : Verb.s = "POST" : Else : Verb.s = "GET" : EndIf
- If Page = "" : Page = "/" : EndIf
- Connect_handle = InternetConnect_(Open_handle, Host, Port, "", "", 3, 0, 0)
- Request_handle = HttpOpenRequest_(Connect_handle, Verb, Page, "", Referer, 0, Flag, 0)
- If Verb = "POST"
- Headers.s = "Content-Type: application/x-www-form-urlencoded" + Chr(13) + Chr(10)
- HttpAddRequestHeaders_(Request_handle, Headers, Len(Headers), $80000000|$20000000)
- EndIf
- If Not Cookie = ""
- Headers.s = "Cookie: " + Cookie + Chr(13) + Chr(10)
- HttpAddRequestHeaders_(Request_handle, Headers, Len(Headers), $80000000|$20000000)
- EndIf
- ;}
- ;{ Send request
- If #PB_Compiler_Unicode
- *PostDataAnsi = AllocateMemory(StringByteLength(PostData, #PB_Ascii) + 1)
- PokeS(*PostDataAnsi, PostData, -1, #PB_Ascii)
- Send_handle = HttpSendRequest_(Request_handle, "", 0, *PostDataAnsi, StringByteLength(PostData, #PB_Ascii))
- FreeMemory(*PostDataAnsi)
- Else
- Send_handle = HttpSendRequest_(Request_handle, "", 0, PostData, Len(PostData))
- EndIf
- ;}
- ;{ Receive response
- If ReturnType = 1 ; Return server response content
- Buffer.s = Space(1024)
- Repeat
- InternetReadFile_(Request_handle, @Buffer, 1024, @Bytes_read.l)
- Result.s + Left(PeekS(@Buffer,-1,#PB_Ascii), Bytes_read)
- Buffer = Space(1024)
- Until Bytes_read = 0
- ElseIf ReturnType = 2; Return Cookie(s)
- For i = 0 To 9
- Buffer.s = Space(1024)
- Headernum = i
- Length = Len(Buffer)
- If HttpQueryInfo_(Request_handle, 43, @Buffer, @Length, @Headernum)
- Result.s + Buffer + #CRLF$
- EndIf
- Next
- ElseIf ReturnType = 3; Return both
- For i = 0 To 9
- Buffer.s = Space(1024)
- Headernum = i
- Length = Len(Buffer)
- If HttpQueryInfo_(Request_handle, 43, @Buffer, @Length, @Headernum)
- Result.s + Buffer + #CRLF$
- EndIf
- Next
- Result + #CRLF$
- Buffer.s = Space(1024)
- Repeat
- InternetReadFile_(Request_handle, @Buffer, 1024, @Bytes_read.l)
- Result.s + Left(PeekS(@Buffer,-1,#PB_Ascii), Bytes_read)
- Buffer = Space(1024)
- Until Bytes_read = 0
- ElseIf ReturnType = 4; Download file
- If File_to_download <> ""
- Filehandle = CreateFile(#PB_Any, File_to_download)
- fBytes.l = 0
- Loop.b = 1
- fBuffer = AllocateMemory(4096)
- Repeat
- InternetReadFile_(Request_handle, fBuffer, 4096, @Bytes_read.l)
- If Bytes_read = 0
- Loop = 0
- Else
- fBytes = fBytes + Bytes_read
- WriteData(Filehandle, fBuffer, Bytes_read)
- EndIf
- Until Loop = 0
- CloseFile(Filehandle)
- Result = Str(FileSize(File_to_download))
- Else
- Result = ""
- EndIf
- ElseIf ReturnType = 5 ; return redirected URl + cookies
- For i = 0 To 9
- Buffer.s = Space(1024)
- Headernum = i
- Length = Len(Buffer)
- If HttpQueryInfo_(Request_handle, 43, @Buffer, @Length, @Headernum)
- Result.s + Buffer + #CRLF$
- EndIf
- Next
- Buffer.s = Space(#MAX_PATH)
- Headernum = 0
- Length = Len(Buffer)
- If HttpQueryInfo_(Request_handle, 33, @Buffer, @Length, @Headernum)
- Result = Buffer + #CRLF$ + Result
- EndIf
- EndIf
- ;}
- ;{ Close handle
- InternetCloseHandle_(Open_handle)
- InternetCloseHandle_(Connect_handle)
- InternetCloseHandle_(Request_handle)
- InternetCloseHandle_(Send_handle)
- Delay(70)
- ;}
- ProcedureReturn Result
- EndProcedure
Advertisement
Add Comment
Please, Sign In to add comment