RosettaCodeData/Task/HTTPS/FreeBASIC/https.basic

53 lines
1.8 KiB
Plaintext

#include once "windows.bi"
#include once "win/wininet.bi"
' Function to check the host certificate for validity
Function CheckCertificate(hRequest As HINTERNET) As Boolean
Dim As DWORD dwFlags, dwBuffLen = Sizeof(DWORD)
If InternetQueryOption(hRequest, INTERNET_OPTION_SECURITY_FLAGS, @dwFlags, @dwBuffLen) Then
If (dwFlags And SECURITY_FLAG_IGNORE_UNKNOWN_CA) = 0 Then Return True
End If
Return False
End Function
' Main program
Dim As HINTERNET hInternet, hConnect, hRequest
Dim As String url = "https://www.w3.org/"
Dim As String buffer
Dim As DWORD bytesRead
hInternet = InternetOpen("FreeBASIC HTTP Request", INTERNET_OPEN_TYPE_DIRECT, null, null, 0)
If hInternet Then
hConnect = InternetConnect(hInternet, "www.w3.org", INTERNET_DEFAULT_HTTPS_PORT, null, null, INTERNET_SERVICE_HTTP, 0, 0)
If hConnect Then
hRequest = HttpOpenRequest(hConnect, "GET", "/", null, null, null, INTERNET_FLAG_SECURE, 0)
If hRequest Then
If HttpSendRequest(hRequest, null, 0, null, 0) Then
If CheckCertificate(hRequest) Then
Do
buffer = Space(1024)
If InternetReadFile(hRequest, Strptr(buffer), Len(buffer), @bytesRead) = 0 Then Exit Do
If bytesRead = 0 Then Exit Do
Print Left(buffer, bytesRead);
Loop
Else
Print "Invalid certificate."
End If
Else
Print "Failed to send request."
End If
InternetCloseHandle(hRequest)
Else
Print "Failed to open request."
End If
InternetCloseHandle(hConnect)
Else
Print "Failed to connect."
End If
InternetCloseHandle(hInternet)
Else
Print "Failed to open internet."
End If
Sleep