?? 怎么在程序里向服務(wù)器的cgi提交數(shù)據(jù).txt
字號(hào):
下 面 的 文 章 來(lái) 自 新 聞 組 , 作 者 不 詳 。 其 原 理 是 利 用 VB設(shè) 計(jì) 一 個(gè) Active Dll, 然 后 在 ASP中 調(diào) 用 。 這 個(gè) 例 子 是 采 用 GET方 式 提 交 數(shù) 據(jù) , 你 可 以 修 改 VB程 序 使 其 支 持 POST方 式 。 如 果 你 僅 僅 是 編 寫 一 個(gè) 客 戶 端 的 程 序 。 只 需 要 參 考 Active Dll的 代 碼 就 可 以 了 。
使 用 ASP建 立 Http組 件
關(guān) 鍵 詞 : ASP, 組 件 Components
生 成 HTTP組 件
自 己 動(dòng) 手 , 豐 衣 足 食 , 下 面 介 紹 如 何 生 成 自 己 的 AspHttp組 件 。
使 用 Winsock控 件 , 下 面 將 介 紹 怎 么 來(lái) 建 立 一 個(gè) 簡(jiǎn) 單 的 HTTP組 件 。
記 住 先 選 擇 mswinsck.ocx控 件 。
下 面 的 代 碼 是 在 VB6中 編 譯 的 。
代 碼 如 下 :
Private WithEvents objWinSock As MSWinsockLib.Winsock
Private strURL As String
Private strURI As String
Private strServer As String
Private nPort As Long
Private strHead As String
Private strData As String
Private bConnected As Boolean
Public Function httpGet(URL As String) As String
Set objWinSock = New MSWinsockLib.Winsock
strURL = URL
ParseURL
Connect
SendRequest
objWinSock.Close
strHead = Left(strData, InStr(strData, vbCrLf &
vbCrLf))
strData = Right(strData, Len(strData) -
InStr(strData, vbCrLf & vbCrLf))
httpGet = strData
End Function
Private Sub ParseURL()
If LCase(Left(strURL, 7)) = "http://" Then
If InStr(8, strURL, "/") = 0 Then
strServer = Right(strURL, Len(strURL) -
7)
strURI = "/"
Else
strServer = Mid(strURL, 8, InStr(8,
strURL, "/") - 8)
strURI = Right(strURL, Len(strURL) -
InStr(8, strURL, "/") + 1)
End If
If InStr(strServer, ":") <> 0 Then
nPort = CLng(Right(strServer,
Len(strServer) - InStr(strServer,
":")))
strServer = Left(strServer,
InStr(strServer, ":") - 1)
End If
If nPort = 0 Then nPort = 80
Else
Err.Raise vbObjectError, "Error", "錯(cuò) 誤 的 URL"
End If
End Sub
Private Sub Connect()
Dim dtStart As Date
dtStart = Now()
objWinSock.RemoteHost = strServer
objWinSock.RemotePort = nPort
objWinSock.Connect
Do Until bConnected
DoEvents
If DateDiff("s", dtStart, Now) > 30 Then
Err.Raise vbObjectError, "Error", "連 接 超
時(shí) "
End If
Loop
End Sub
Private Sub SendRequest()
Dim strCmd
Dim dtStart As Date
dtStart = Now()
strCmd = "GET " & strURI & " HTTP/1.0" & vbCrLf
strCmd = strCmd & "User-Agent: aspHttp.http" &
vbCrLf
strCmd = strCmd & "Accept: */*" & vbCrLf
strCmd = strCmd & vbCrLf
objWinSock.SendData strCmd
Do Until objWinSock.State = sckClosing
DoEvents
If DateDiff("s", dtStart, Now) > 60 Then
Err.Raise vbObjectError, "Error", "請(qǐng) 求 超
時(shí) "
End If
Loop
End Sub
Public Property Get Head() As Variant
Head = strHead
End Property
Public Property Get Body() As Variant
Body = strData
End Property
Private Sub objWinSock_DataArrival(ByVal bytesTotal As
Long)
Dim strTemp
objWinSock.GetData strTemp, vbString
strData = strData & strTemp
End Sub
Private Sub objWinSock_Connect()
bConnected = True
End Sub
Private Sub objWinSock_Error(ByVal Number As Integer,
Description As String, _
ByVal Scode As Long, ByVal Source As String, ByVal
HelpFile As String, _
ByVal HelpContext As Long, CancelDisplay As Boolean)
Err.Raise vbObjectError, "Error", "Winsock Error: "
& Number &
vbCrLf & Description
CancelDisplay = True
End Sub
編 譯 該 組 件 , 然 后 按 照 下 面 的 步 驟 注 冊(cè) 該 組 件
C:\net stop iisadmin /y
C:\mtxstop
編 譯 成 Active Dll
C:\net start w3svc
在 ASP中 調(diào) 用 這 個(gè) 組 件
<%@ Language=VBScript %>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio
6.0">
</HEAD>
<BODY>
<%
Dim obj
Set obj = Server.CreateObject("aspHttp.http")
Response.Write obj.httpGet("http://www.chinaasp.com.cn")
%>
</BODY>
</HTML>
<END>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -