龍捲風
關鍵字:ASP,ActiveX控制項,數位簽章,安全
問題提出:
ActiveX控制項得到用戶端的資訊,如何傳遞到服務端???
一種方法就是得到值後,使用Get,Post方式提交,這可能也是最常用的.
有沒有更好一些的方法呢?
能不能在控制項中直接向伺服器發出請求而得到資料呢?
開啟vb6,建立ActiveX控制項工程。
工程名:fOcx,使用者控制項名:UC3
添加1個按鈕,2個文字框
代碼如下:
Option Explicit
Private Sub Command1_Click()
'注意字串和數位寫法有些區別
'使用AsyncRead通過HTTP發送你的請求
UserControl.AsyncRead "http://yang/xml/activex.asp?s1=" & Text1.Text & "", vbAsyncTypeByteArray
UserControl.AsyncRead "http://yang/xml/activex.asp?s1=" & Text1.Text, vbAsyncTypeByteArray
End Sub
'AsyncReadComplete 事件用來從asp頁面接受和分析。
'當容器剛完成一個非同步讀取請求時 , 發生該事件?
'AsyncProp 中的數值指定了已完成的某個非同步資料讀取請求,
'它與前一個 AsyncRead 方法調用中的資料匹配。
'AsyncReadComplete 事件程序中應包含錯誤處理代碼,因為錯誤狀態會終止下載。
'如果發生了這種情況,當訪問 AsyncProperty 對象的 Value 屬性時將會發生錯誤。
Private Sub UserControl_AsyncReadComplete(AsyncProp As AsyncProperty)
On Error GoTo errhandle
Text2.Text = ByteArrayToString(AsyncProp.Value)
errhandle:
Err.Raise 601, "非同步讀取發生了錯誤", Err.Description
End Sub
'將位元組數群組轉換成字串
Public Function ByteArrayToString(bytArray() As Byte) As String
Dim sAns As String
sAns = StrConv(bytArray, vbUnicode)
ByteArrayToString = sAns
End Function
我們來看看http://yang/xml/activex.asp這個檔案
<%
dim str
str=request("s1")
if str="name" then
response.write ("龍捲風")
elseif str="age" then
response.write ("26")
else
response.write ("沒有可用資訊返回")
end if
%>
很簡單,使用request接受參數,response返回。
這個例子可以進一步處理,將伺服器名以屬性的方式傳遞給控制項。
比如:<PARAM NAME="ServerName" VALUE="192.168.0.1 ">
然後在程式中得到,就可以使用了,如:
UserControl.AsyncRead "http://192.168.0.1/xml/activex.asp?s1=" & Text1.Text & "", vbAsyncTypeByteArray
然後在程式中得到就可以靈活處理了。