???? ????? ????? ?? ????? ????? Gateway Interface (CGI) ??????? ?? ??? ??? ????? ???? ????? ?????? ??? ??????? ?????? ???? STDIN ?? STDOUT. ????? ???? ???? ?????? ???? ??? ??????? Microsoft Visual Basic ?? ???? ?? ????? ????? CGI ?? Visual Basic ?????? ?? ????? ???. ??? ??????? ???? ???????? ?????? ????????? CGI ?? Visual Basic? ????? ????? Visual Basic CGI ????.
??????: Microsoft ???? ????? ??????? ?? ????? ???? ??? ???? ???????? ?? ???????. ??? ?????, ???? ??? ??????? ????? ?????? ???? ?? merchantability ?? fitness ?? ???? ????. ????? ??? ??????? ?? ???? ?? ?????? ?? ??? ??????? ???? ?? ???? ?????? ??????? ??????? ???? ??? ????????? ?????? ??? ?????? ?????????. ??? ?? ???? ??? ??????? ??? ????? ????? ????? ?? ???? ??????? ?????? ??????? ????? ???? ?????? ??? Microsoft ????? ????? ?????? ??????? ?? ????? ????.
??????? ??????? ??????
???????? ????? ???? ?? ??????? ?????? Environ $ ?? Visual Basic ???????:
???? ?? NAME ?? ????? ?????? ???? ???? ?? ???????. ??? ????? ?????? ?????? ?? ?? VALUE.
??????? ?? STDIN ???????? ??? STDOUT
?????? ?????? Win32 ReadFile ?????? ?? STDIN ??????? WriteFile ??????? ??? STDOUT. ????? ??? ??????? ??? ????? ???? ??? STDIN ?? STDOUT. ????? ??????? ?????? GetStdHandle ?? ?????? ??? ?????? ??? STDIN ?? STDOUT. ?? ??? ???????, aliasing ??????? ?? ?????? GetStdHandle ?????? ?? ????????? ??????. ????????? ?? ??? ??????? ?? ???????:
Public Declare Function stdin Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_INPUT_HANDLE) As Long
Public Declare Function stdout Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As Long
Public Declare Function ReadFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _
lpNumberOfBytesRead As Long, Optional ByVal lpOverlapped As Long = 0&) As Long
Public Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, Optional ByVal lpOverlapped As Long = 0&) As Long
??? ????? ??????? ???? ?? ??????? ??? ?????? GetStdHandle ??:
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
?????? ?????? ??? ????? MSDN ??????? ?? ?? ????? ?? ??? ???????. ????? ????? ?? ??????? ???? CGI ?? ??????? ??????, ??? ????? ????. ???? ???? ????? ???? ??? Ctrl-J. ???? ????? ??? ????? ??????? ????? ??????? ?? ?????? ?? ?????? ??? ??? preclude ?? ?? ????? ????? ?????? ??????.
????? ????????? ????????
????? ??? ?? ????? ?? ??? ?? ??????? ?????? (Hello.bas):
Option Explicit
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
Public Const CGI_AUTH_TYPE As String = "AUTH_TYPE"
Public Const CGI_CONTENT_LENGTH As String = "CONTENT_LENGTH"
Public Const CGI_CONTENT_TYPE As String = "CONTENT_TYPE"
Public Const CGI_GATEWAY_INTERFACE As String = "GATEWAY_INTERFACE"
Public Const CGI_HTTP_ACCEPT As String = "HTTP_ACCEPT"
Public Const CGI_HTTP_REFERER As String = "HTTP_REFERER"
Public Const CGI_HTTP_USER_AGENT As String = "HTTP_USER_AGENT"
Public Const CGI_PATH_INFO As String = "PATH_INFO"
Public Const CGI_PATH_TRANSLATED As String = "PATH_TRANSLATED"
Public Const CGI_QUERY_STRING As String = "QUERY_STRING"
Public Const CGI_REMOTE_ADDR As String = "REMOTE_ADDR"
Public Const CGI_REMOTE_HOST As String = "REMOTE_HOST"
Public Const CGI_REMOTE_USER As String = "REMOTE_USER"
Public Const CGI_REQUEST_METHOD As String = "REQUEST_METHOD"
Public Const CGI_SCRIPT_NAME As String = "SCRIPT_NAME"
Public Const CGI_SERVER_NAME As String = "SERVER_NAME"
Public Const CGI_SERVER_PORT As String = "SERVER_PORT"
Public Const CGI_SERVER_PROTOCOL As String = "SERVER_PROTOCOL"
Public Const CGI_SERVER_SOFTWARE As String = "SERVER_SOFTWARE"
Public Declare Function Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long) As Long
Public Declare Function stdin Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_INPUT_HANDLE) As Long
Public Declare Function stdout Lib "kernel32" Alias "GetStdHandle" _
(Optional ByVal Handletype As Long = STD_OUTPUT_HANDLE) As Long
Public Declare Function ReadFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, _
lpNumberOfBytesRead As Long, Optional ByVal lpOverlapped As Long = 0&) As Long
Public Declare Function WriteFile Lib "kernel32" _
(ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, _
lpNumberOfBytesWritten As Long, Optional ByVal lpOverlapped As Long = 0&) As Long
Sub Main()
Dim sReadBuffer As String
Dim sWriteBuffer As String
Dim lBytesRead As Long
Dim lBytesWritten As Long
Dim hStdIn As Long
Dim hStdOut As Long
Dim iPos As Integer
' sleep for one minute so the debugger can attach and set a break
' point on line below
' Sleep 60000
sReadBuffer = String$(CLng(Environ$(CGI_CONTENT_LENGTH)), 0)
' Get STDIN handle
hStdIn = stdin()
' Read client's input
ReadFile hStdIn, sReadBuffer, Len(sReadBuffer), lBytesRead
' Find '=' in the name/value pair and parse the buffer
iPos = InStr(sReadBuffer, "=")
sReadBuffer = Mid$(sReadBuffer, iPos + 1)
' Construct and send response to the client
sWriteBuffer = "HTTP/1.0 200 OK" & vbCrLf & "Content-Type: text/html" & _
vbCrLf & vbCrLf & "Hello "
hStdOut = stdout()
WriteFile hStdOut, sWriteBuffer, Len(sWriteBuffer) + 1, lBytesWritten
WriteFile hStdOut, sReadBuffer, Len(sReadBuffer), lBytesWritten
End Sub
????? HTML ??? ?????? ?? CGI (Test.htm)
<HTML>
<HEAD>
<TITLE>Testing VB CGI</TITLE>
</HEAD>
<BODY>
<FORM action="/cgi-bin/hello.exe" method="POST">
<INPUT TYPE="TEXT" NAME="Name"> Name<BR>
<INPUT TYPE="SUBMIT">
</FORM>
</BODY>
</HTML>
????? ?????? ????? Hello.exe CGI ????:
- ????? ????? ???? ?? ?????.exe ??????.
- ????? ??????? ?? Project.
- ????? ???? ????? ??? Project ??????? HELLO.
- ????? Sub Main ???? ???? ??? ??????? (??? ????? ??????? ).
- ???? ????????? ???????? ?? Visual Basic ????? ??? ????? ?? ?????? ???????.
- ??? Hello.exe.
?????????:- ??? ???? ???? ????? ?????? ??? HTTP POST. ??????? ??? GET ????? ????? CGI ??? ??????? ????? ?????? QUERY_STRING. ????? ??????? QUERY_STRING ??? ????? / ?????? ?????? & ???????? " ??? = Joe&Color = ????. " ???? ?? ??? ??????? ????? ???? ???? ????????? (URL) ? ??? ????? ???? ???????? ??? + , ? ???? ???? ???? ??? ! ???? ??? ????? HEX ASCII. ?????? ???? " ??????, World! " ??? ????? ????? ??? " ??????, + World % 21. " ??????? Visual Basic CGI ???? ????? ???? ????????? ???????? ???????.
- ???? ????? ????? CGI ?????? ?????? ??? ?????? ??? ?????? ??? ??????? ???? ???????.
- ?? ??? ??? ??? ???? CGI ??? ????? ??? ???? ?? ??????. ??? ??? ?? ?????? meaningless ????? ????? ??????? ?????? ??????? ? ?????? ?????. ???? ????? ?????? ??????? matter ?? ???? ????? CGI ?? ????? ?? ?????????.
- ???? ??? ?????? ??????? ???? ??? ?????? ??????? conducted ???? ??? CGI ?? Visual Basic? ???? ???? ??? ??? ??? ???? ????? ??? ?????????.. ????? ????? ????? ??? ??? ?????? ?? ???????? ??? ?????? ????????.
- ???? ????? C ?????? ??????? ????????? ???????? ?? Visual Basic. ????? ????? ??????? CGI ????? ?????? ?????? ???? ?????. ?????? ????? Visual Basic ?? Visual C, ????? ????? ??? ??? ?????? , ??? ?? ??? ????? ??????? ??????? ???? ? ?????? ??? . ????? ?????? ?? ??? ?????.exe ?? ????? ????? Visual C ??? ????? CGI ??? ???????? ?? Visual Basic.
-
??????? ????? CGI ???? ??? ?????? ??????? IIS ??????? Execute.
-
?? ??? ??? ????? ??? ??????? ?? ?????? ?????? ?? ????????? ???????? ?? Visual Basic ???? ?? ????? ??????? CGI ?? ????? ?? ?????????. ??? ???? ?? ????????? ?? ????? CGI ??? ???? ????? ?? ?????? Visual Studio. ?????? ??? ??????? ??????? ???? ??? ??? ??????? ????? ???? ??????? ?? ????? ?????Microsoft:
238788
(http://support.microsoft.com/kb/238788/EN-US/
)
????? ????? ????????? CGI Running ??? IIS
RFC 2068, Hypertext Transfer Protocol
(http://www.cis.ohio-state.edu/htbin/rfc/rfc2068.html)
RFC 1738, Uniform Resource Locators (URL).
(http://www.cis.ohio-state.edu/htbin/rfc/rfc1738.html)
The Common Gateway Interface (http://hoohoo.ncsa.uiuc.edu/cgi)
(http://hoohoo.ncsa.uiuc.edu/cgi/)
238788
(http://support.microsoft.com/kb/238788/EN-US/
)
????? ????? ????????? CGI Running ??? IIS
207671
(http://support.microsoft.com/kb/207671/EN-US/
)
?????? ??? ????? ???? ??????? ?? ??????? IIS
239535
(http://support.microsoft.com/kb/239535/EN-US/
)
????? CGI Using Debugger VC Just-in-????? (JIT)
???? ???????: 239588 - ????? ??? ??????: 23/?? ??????/1428 - ??????: 5.2
????? ???
- Microsoft Internet Information Server 3.0
- Microsoft Internet Information Server 4.0
- Microsoft Internet Information Services 5.0
- Microsoft Internet Information Services 6.0
| kbinfo kbcgi KB239588 KbMtar kbmt |
????? ???????: ??? ????? ??? ?????? ???????? ?????? ????? ???? ????? ?????????? ????? ?? ????????? ?????? ????. ???? ???? ?????????? ???? ?? ???????? ???????? ?????? ????????? ????? ????????? ???????? ????? ???????? ?????? ?? ?????? ??? ?? ???????? ???????? ?? ????? ??????? ?????? ??? ??????? ?????? ??. ?????? ?? ???? ??? ??????? ???????? ????? ?? ???? ????? ?????? ??? ????? ??? ????? ??????? ?? ????? ?? ?????? ??? ??? ??????? ??????? ?? ????? ????? ????? ????? ?????. ?? ????? ???? ?????????? ??????? ??? ????? ?? ??????? ?? ????? ?????? ?? ??? ????? ?? ????? ??????? ?? ???????? ?? ??? ???????. ???? ???? ?????????? ???????? ??? ????? ?????? ??????? ??????. ??? ?? ???? ??? ??????? ????? ?? ???????? ?? ??? ???????? ?????? ????? ????????? ??????? ???? ??? ???????
???? ??? ????? ??????? ?????? ??????????
239588
(http://support.microsoft.com/kb/239588/en-us/
)