热情软件屋

 

怎么在程序里向服务器的cgi提交数据


编号:QA002055
建立日期: 1999年11月18日 最后修改日期:1999年11月18日
所属类别:

dageming:
    操作系统: win98
    编程工具: vb\asp
    问题: 请问怎么在程序里向服务器的cgi提交数据?

回答:

    下面的文章来自新闻组,作者不详。其原理是利用VB设计一个Active Dll,然后在ASP中调用。这个例子是采用GET方式提交数据,你可以修改VB程序使其支持POST方式。如果你仅仅是编写一个客户端的程序。只需要参考Active Dll的代码就可以了。
    


    使用ASP建立Http组件
    关键词:ASP, 组件Components
    生成HTTP组件
    自己动手,丰衣足食,下面介绍如何生成自己的AspHttp组件。
    使用Winsock控件,下面将介绍怎么来建立一个简单的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", "错误的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", "连接超
    时"
     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", "请求超
    时"
     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:\net stop iisadmin /y
     C:\mtxstop
    编译成Active Dll
     C:\net start w3svc
    在ASP中调用这个组件
    
     <%@ 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>
    

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio