免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
如何用 Visual Basic 編寫(xiě) CGI 應(yīng)用程序

重要提示:本文章是 Microsoft 軟件自動(dòng)翻譯的結(jié)果,而非專業(yè)譯者翻譯的結(jié)果。 Microsoft 提供專業(yè)人員翻譯的文章、由自動(dòng)翻譯生成的文章以及來(lái)自 Microsoft 社區(qū)的文章翻譯,因此你能夠以自己的語(yǔ)言閱讀所有知識(shí)庫(kù)文章。 需要注意的是,由自動(dòng)翻譯生成的文章(包括 Microsoft 社區(qū)審閱的文章)可能包含詞匯、句法或語(yǔ)法錯(cuò)誤。 對(duì)于因不正確的內(nèi)容翻譯或使用不正確的內(nèi)容翻譯而造成的不準(zhǔn)確或錯(cuò)誤或任何損害,Microsoft 概不負(fù)責(zé)。



通用網(wǎng)關(guān)接口 (CGI) 應(yīng)用程序可以在任何可訪問(wèn)的環(huán)境變量和標(biāo)準(zhǔn)輸入或標(biāo)準(zhǔn)輸出的編程語(yǔ)言編寫(xiě)。功能強(qiáng)大的文本處理 Microsoft Visual Basic 編程語(yǔ)言的功能,因?yàn)樵S多 Web 開(kāi)發(fā)人員想在 Visual Basic 中編寫(xiě) CGI 程序。本文闡釋了在 Visual Basic 編寫(xiě) CGI 應(yīng)用程序的技術(shù),并提供了簡(jiǎn)單示例,Visual Basic CGI。

詳細(xì)信息


注意:Microsoft 提供的編程示例僅用于說(shuō)明,沒(méi)有任何明示或暗示的擔(dān)保。這包括但不限于適銷(xiāo)性或特定用途適用性的暗示擔(dān)保。本文假定您熟悉所演示的編程語(yǔ)言和用于創(chuàng)建和調(diào)試過(guò)程的工具。Microsoft 的支持工程師可以幫助解釋某個(gè)特定過(guò)程的功能,但是他們不會(huì)修改這些示例以提供額外的功能或構(gòu)建過(guò)程以滿足您的特定要求。

檢索環(huán)境變量

若要檢索環(huán)境變量,請(qǐng)使用那么 Environ$函數(shù)在 Visual Basic 中,如下所示:
VALUE = Environ$(NAME)

請(qǐng)注意,名稱是您要檢索環(huán)境變量。在值中返回其值。

從標(biāo)準(zhǔn)輸入中的讀取和寫(xiě)入到標(biāo)準(zhǔn)輸出

使用 Win32 ReadFile函數(shù)來(lái)讀取標(biāo)準(zhǔn)輸入和寫(xiě)文件函數(shù)寫(xiě)入到標(biāo)準(zhǔn)輸出。這些功能要求您提供到 STDIN 或標(biāo)準(zhǔn)輸出句柄。 可以使用GetStdHandle函數(shù)獲取 STDIN 或標(biāo)準(zhǔn)輸出句柄。 這篇文章,在別名用于GetStdHandle函數(shù)簡(jiǎn)化函數(shù)調(diào)用。這些函數(shù)的聲明如下所示:
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函數(shù)的常數(shù)的定義如下:
Public Const STD_INPUT_HANDLE = -10&
Public Const STD_OUTPUT_HANDLE = -11&
請(qǐng)參考 MSDN 文檔的這些函數(shù)中的每個(gè)參數(shù)的定義。在以下示例中,由常 CGI 環(huán)境變量的完整列表。這將列出在一起上 Ctrl J.所有常量此外通過(guò)提供編譯器和 IntelliSense 驗(yàn)證,從而消除編程錯(cuò)誤,但不會(huì)阻止您從您自己的字符串輸入。

示例代碼

為簡(jiǎn)單起見(jiàn),省略了錯(cuò)誤捕獲,在下面的示例 (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 表單以測(cè)試 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>

若要生成簡(jiǎn)單的 CGI Hello.exe 文件的步驟如下:

  1. 標(biāo)準(zhǔn)的.exe 項(xiàng)目創(chuàng)建一個(gè)新項(xiàng)目。

  2. 從項(xiàng)目中刪除窗體。

  3. 將模塊添加到該項(xiàng)目并將其命名為 HELLO。

  4. 設(shè)為啟動(dòng)對(duì)象 (在項(xiàng)目屬性中) 的 Sub Main。

  5. 復(fù)制上面的 Visual Basic 代碼并將其粘貼到模塊。

  6. 使 Hello.exe。

注釋:
  • 該代碼示例演示如何處理 HTTP POST 請(qǐng)求。若要處理一個(gè) GET 請(qǐng)求,CGI 應(yīng)用程序需要檢索 QUERY_STRING 環(huán)境變量。QUERY_STRING 變量包含和格式由分隔的名稱/值對(duì)"名稱 = Joe 和顏色 = Red。"請(qǐng)注意,使用 URL 編碼,所有的空格將被轉(zhuǎn)換為+,如!的所有特殊字符會(huì)轉(zhuǎn)換為其十六進(jìn)制 ASCII 值。換句話說(shuō),將字符串"Hello,世界 !"表示為"Hello,+ 全球 21%。"Visual Basic CGI 應(yīng)用程序必須實(shí)現(xiàn)所有分析的代碼。

  • 服務(wù)啟動(dòng)時(shí)的 CGI 應(yīng)用程序,因?yàn)樗赡懿荒茉L問(wèn)網(wǎng)絡(luò)共享。

  • 請(qǐng)注意 CGI 運(yùn)行作為一個(gè)服務(wù),它與服務(wù)器進(jìn)行通信。因此,視覺(jué)界面窗體、 控件和消息框是完全沒(méi)有意義。事實(shí)上,消息框?qū)?dǎo)致一個(gè) CGI 應(yīng)用程序停止響應(yīng)。

  • 以便不會(huì)顯示默認(rèn)的錯(cuò)誤消息框應(yīng)該在 Visual Basic 中的 CGI 代碼進(jìn)行錯(cuò)誤處理。可以在服務(wù)器上的錯(cuò)誤消息記錄,也可以將它們寫(xiě)到用戶的瀏覽器。

  • Visual C 調(diào)試器可以調(diào)試在 Visual Basic 編寫(xiě)的應(yīng)用程序。因此,您可以使用 CGI 調(diào)試下面提到的技術(shù)。調(diào)試與 Visual C Visual Basic 應(yīng)用程序,選擇將編譯為本機(jī)代碼,,然后選擇創(chuàng)建符號(hào)調(diào)試信息并無(wú)優(yōu)化。完成并生成.exe 時(shí),Visual C 可以附加到運(yùn)行 CGI 應(yīng)用程序用 Visual Basic 編寫(xiě)的。

  • 若要測(cè)試 CGI 應(yīng)用程序,請(qǐng)將其復(fù)制到 IIS 虛擬目錄的執(zhí)行權(quán)限。

  • 請(qǐng)注意,運(yùn)行時(shí)錯(cuò)誤或?qū)υ捒蛑械?Visual Basic 代碼可能導(dǎo)致 CGI 應(yīng)用程序停止響應(yīng)。 如果 CGI 應(yīng)用程序停止響應(yīng),則可以在 Visual Studio 調(diào)試器中運(yùn)行。的其他信息,請(qǐng)單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫(kù)中相應(yīng)的文章:


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
VB - 播放WAV文件
VB的API編程精粹
用VB制作簡(jiǎn)單的木馬程序 -
看到一個(gè)VB打印模塊,保存一下
VB ShellExecute 函數(shù)應(yīng)用技巧(ZT)
VB的線程注入核心代碼(頁(yè) 1)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服