MDP
Well-Known Member
آموزش ساخت یک Web Request در VB.Net
سلام!
شما حتما شده تا حالا خواسته باشید که یک Request رو از برنامتون به یک صفحه روی وب ارسال کنید.
برای مثال شما می خواین وقتی کاربر برنامتون روی دکمه لوگین کلیک کرد برنامه به سرور وصل ببشه و Username و Password رو چک کنه!
مواد لازم!
Vs.net 2003
خوب شروع می کنیم!
برای این کار شما ابتدا باید یه کلاس بسازید توی این کلاس رو به شکل زیر پر کنید!
این کلاس همون web request ما رو درست می کنه!
clsWebRequest
کدش خیلی سادست نیاز به توضیح نداره!(مشکل بود در خدمتم!)
حالا شما می تونید برید سراغ کار اصلی
شما فرض کنید می خواید به یه سایت وصل شید برای این کار باید یه درخواست به سرور بفرستید!که محتویات درخواست شما رو داره!
مثلا برای سرور ورژن برنامه فعلی و یا اسم یوزر رو می فرستید!
برای این کار شما دو تا روش دارید:
1-با Query String بفرستیدکه برای این کار می تونید در انتهای لینک سایت به صورت Query اطلاعات رو بفرستید که خوب قاعدتا محدودیت داره!
2-با Post برای این کار توی خود همون کلاس یه sub تعریف شده به نام: AddPostDate
طرز کارش به این صورته:
.addpostdata(“name”,”Value”)
شما به این طریق میتونید اطلاعات رو سند کنید!
ولی میرسیم به بخش بازیابی اطلاعات.
برای این کار در همون کلاس یه متد وجود داره به نام OutputFile
این متد یه آرگمان ورودی داره که فایل رو مشخص میکنه!
شما بعد از اینکه خروجی رو گرفتید میتونید ازش هرجوری کهدوست دارید استفاده کنید!
اینم یه نمونه کد برای این برنامه یه برنامه نمونه هم گذاشتم!
برای عزیزانی که برنامه VS.Net رو ندارند کامپایل شده رو گذاشتم!
امید وارم مورد استفاده واقع بشه!
.:مسعود:.
www.elol.ir Team Programer
سلام!
شما حتما شده تا حالا خواسته باشید که یک Request رو از برنامتون به یک صفحه روی وب ارسال کنید.
برای مثال شما می خواین وقتی کاربر برنامتون روی دکمه لوگین کلیک کرد برنامه به سرور وصل ببشه و Username و Password رو چک کنه!
مواد لازم!
Vs.net 2003
خوب شروع می کنیم!
برای این کار شما ابتدا باید یه کلاس بسازید توی این کلاس رو به شکل زیر پر کنید!
این کلاس همون web request ما رو درست می کنه!
clsWebRequest
کد:
[LEFT]
Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Threading
Imports Microsoft.VisualBasic
Public Enum ReqEvent
SE_POSTINGDATA = &H0
SE_REQUESTINGHEADER = &H1
SE_HEADERRECEIVED = &H2
SE_DOWNLOADING = &H4
SE_COMPLETED = &H5
SE_REDIRECTED = &H6
SE_REQUESTFAILED = &H10
SE_REQUESTABORTED = &H11
End Enum
Public Class RequestState
Private Shared BUFFER_SIZE As Integer = 1024
Public Data As StringBuilder
Public Buffer() As Byte
Public Request As HttpWebRequest
Public Response As HttpWebResponse
Public ResponseStream As Stream
Public StatusCallback As StatusCallbackDelegate
Public ByteLen As Long
Public lResumeStart As Long
Public OutputFileStream As FileStream
Public Sub New()
Buffer = New Byte(BUFFER_SIZE) {}
Request = Nothing
ResponseStream = Nothing
StatusCallback = Nothing
ByteLen = 0
End Sub
Protected Overrides Sub Finalize()
Data = Nothing
Call Buffer.Clear(Buffer, 0, Buffer.LongLength)
If Not Request Is Nothing Then Call Request.Abort() : Request = Nothing
If Not Response Is Nothing Then Call Response.Close() : Response = Nothing
If Not ResponseStream Is Nothing Then Call ResponseStream.Close() : ResponseStream = Nothing
If Not StatusCallback Is Nothing Then StatusCallback = Nothing
MyBase.Finalize()
End Sub
End Class
Public Delegate Sub StatusCallbackDelegate(ByVal StatusEvent As ReqEvent, ByVal lBytesComplete As Long, ByVal lBytesTotal As Long, ByVal iPercent As Integer)
Public Class clsWebRequest
Private Shared BUFFER_SIZE As Integer = 1024
Private Shared ReqState As RequestState
Private Shared ReqThread As Thread
Private Shared sOutputFile As String
Private Shared sPostData As String
Private Shared bCancel As Boolean
Private Shared bUseSmartRedirection As Boolean
Private Shared bResume As Boolean
Private Shared sResumeData As String
Public Property StatusCallBack() As StatusCallbackDelegate
Get
Return ReqState.StatusCallback
End Get
Set(ByVal Value As StatusCallbackDelegate)
ReqState.StatusCallback = Value
End Set
End Property
Public Property ResponseObj() As HttpWebResponse
Get
Return ReqState.Response
End Get
Set(ByVal Value As HttpWebResponse)
ReqState.Response = Value
End Set
End Property
Public Property RequestObj() As HttpWebRequest
Get
Return ReqState.Request
End Get
Set(ByVal Value As HttpWebRequest)
ReqState.Request = Value
End Set
End Property
Public Property OutputFile() As String
Get
Return sOutputFile
End Get
Set(ByVal Value As String)
sOutputFile = Value
End Set
End Property
Public Property DataToPost() As String
Get
Return sPostData
End Get
Set(ByVal Value As String)
sPostData = Value
End Set
End Property
Public Property UseSmartRedirection() As Boolean
Get
Return bUseSmartRedirection
End Get
Set(ByVal Value As Boolean)
bUseSmartRedirection = Value
End Set
End Property
Public Property DoResume() As Boolean
Get
Return bResume
End Get
Set(ByVal Value As Boolean)
bResume = Value
End Set
End Property
Public Property ResumeData() As String
Get
Return sResumeData
End Get
Set(ByVal Value As String)
sResumeData = Value
End Set
End Property
Public ReadOnly Property Data() As String
Get
Return ReqState.Data.ToString
End Get
End Property
Public ReadOnly Property RequestUsed() As String
Get
If Not ReqState.Request Is Nothing Then
Dim sRequest As String
sRequest = ReqState.Request.Method & " " & ReqState.Request.RequestUri.PathAndQuery & " HTTP/1.1" & vbCrLf
sRequest = sRequest & Replace(ReqState.Request.Headers.ToString, vbCrLf & vbCrLf, "") & vbCrLf
If InStr(LCase(sRequest), vbCrLf & "connection: ") = 0 Then
If ReqState.Request.Connection <> "" Then
sRequest = sRequest & "Connection: " & ReqState.Request.Connection & ",Close" & vbCrLf
Else
If ReqState.Request.KeepAlive Then
sRequest = sRequest & "Connection: Keep-Alive" & vbCrLf
Else
sRequest = sRequest & "Connection: Close" & vbCrLf
End If
End If
End If
sRequest = sRequest & "Host: " & ReqState.Request.RequestUri.Host
Return sRequest
Else
Return Nothing
End If
End Get
End Property
'====================================================================
Public Sub New()
ReqState = New RequestState
End Sub
Public Sub New(ByRef sURL As String)
ReqState = New RequestState
Try
ReqState.Request = HttpWebRequest.Create(sURL)
Catch Ex As Exception
Call DisplayException("Unable to create the request for the selected URL!", Ex)
End Try
End Sub
Protected Overrides Sub Finalize()
If Not ReqState Is Nothing Then ReqState = Nothing
If Not ReqThread Is Nothing Then Call ReqThread.Abort() : ReqThread = Nothing
MyBase.Finalize()
End Sub
'====================================================================
Public Function ProcessRequest(Optional ByVal sURL As String = Nothing) As Long
ProcessRequest = 0
bCancel = False
'- Make Final Changes To The Request
If ReqState.Request Is Nothing Then
Try
ReqState.Request = HttpWebRequest.Create(sURL)
Catch ex As Exception
DisplayException("An error has occurred while trying to setup a request", ex)
Exit Function
End Try
End If
'- Setup For A POST If POST Data Is Available
If sPostData <> "" Then
ReqState.Request.Method = "POST"
ReqState.Request.ContentType = "application/x-www-form-urlencoded"
ReqState.Request.ContentLength = sPostData.Length
End If
ReqState.Request.AllowAutoRedirect = False
'- Add The Range Needed For Resuming
If bResume Then
Dim iLen As Long
If sOutputFile <> "" Then
iLen = FileLen(sOutputFile)
Else
iLen = sResumeData.Length
End If
ReqState.Request.AddRange(iLen)
ReqState.lResumeStart = iLen
End If
'- Create/Clear The Data
ReqState.Data = New StringBuilder("")
'- Start The Request Thread
ReqThread = New Thread(AddressOf RunThread)
ReqThread.Start()
If ReqThread.IsAlive Then ProcessRequest = 1
End Function
Public Sub Abort()
bCancel = True
End Sub
'====================================================================
Private Shared Sub RunThread()
If UCase(ReqState.Request.Method) = "POST" Then
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_POSTINGDATA, 0, 0, 0)
Dim AsyncResult As IAsyncResult = CType(ReqState.Request.BeginGetRequestStream(AddressOf RequestCallback, ReqState), IAsyncResult)
Else
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTINGHEADER, 0, 0, 0)
Dim AsyncResult As IAsyncResult = CType(ReqState.Request.BeginGetResponse(AddressOf ResponseCallback, ReqState), IAsyncResult)
End If
End Sub
'Private Shared Sub EmulatePostData()
' Try
' '- Build The Request From The WebRequest
' Dim Req As HttpWebRequest = ReqState.Request
' Req.ContentLength = sPostData.Length
' Dim sOutData As New StringBuilder("")
' sOutData.Append("POST " & Req.Address.PathAndQuery & " HTTP/" & Req.ProtocolVersion.Major & "." & Req.ProtocolVersion.Minor & vbCrLf)
' sOutData.Append("Host: " & Req.Address.Host & vbCrLf)
' If Not Req.Accept Is Nothing Then sOutData.Append("Accept: " & Req.Accept & vbCrLf)
' If Not Req.Connection Is Nothing Then sOutData.Append("Connection: " & Req.Connection & vbCrLf)
' If Req.ContentLength <> -1 Then sOutData.Append("Content-Length: " & Req.ContentLength & vbCrLf)
' If Not Req.ContentType Is Nothing Then sOutData.Append("Content-Type: " & Req.ContentType & vbCrLf)
' If Not Req.Referer Is Nothing Then sOutData.Append("Referer: " & Req.Referer & vbCrLf)
' If Not Req.UserAgent Is Nothing Then sOutData.Append("User-Agent: " & Req.UserAgent & vbCrLf)
' Dim i As Integer
' Dim sExclude As String = "|accept|connection|content-length|content-type|referer|user-agent|host|"
' For i = 0 To Req.Headers.Count - 1
' If sExclude.IndexOf("|" & Req.Headers.Keys.Item(i).ToLower & "|") = -1 Then
' sOutData.Append(Req.Headers.Keys.Item(i) & ": " & Req.Headers.Item(i) & vbCrLf)
' End If
' Next
' sExclude = Nothing
' sOutData.Append(vbCrLf & sPostData)
' '- Connect To The Host
' Dim Sck As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
' Dim IPEP As New IPEndPoint(Dns.Resolve(ReqState.Request.Address.Host).AddressList(0), ReqState.Request.Address.Port)
' Sck.Connect(IPEP)
' If Sck.Connected Then
' '- Send Out The Request
' Sck.Send(Encoding.ASCII.GetBytes(sOutData.ToString))
' '- Retreive The Response
' Dim sHeader As String
' Dim sBuf As String
' Dim iLen As Integer = Sck.Receive(ReqState.Buffer, BUFFER_SIZE, SocketFlags.None)
' Do While iLen > 0
' If sHeader = "" Then
' sBuf = sBuf & Encoding.ASCII.GetString(ReqState.Buffer, 0, iLen)
' i = sBuf.IndexOf(vbCrLf & vbCrLf)
' If i <> -1 Then
' sHeader = Left(sBuf, i)
' sBuf = Mid(sBuf, i + 5)
' ReqState.ByteLen = sBuf.Length
' If sBuf <> "" Then
' '- Write Data To File Or Save To Buffer
' If Not ReqState.OutputFileStream Is Nothing Then
' ReqState.OutputFileStream.Write(Encoding.ASCII.GetBytes(sBuf), 0, sBuf.Length)
' Else
' ReqState.Data.Append(sBuf)
' End If
' End If
' End If
' Else
' '- Add Length To The Amount Received
' ReqState.ByteLen = ReqState.ByteLen + iLen
' '- Write Data To File Or Save To Buffer
' If Not ReqState.OutputFileStream Is Nothing Then
' ReqState.OutputFileStream.Write(ReqState.Buffer, 0, iLen)
' Else
' ReqState.Data.Append(Encoding.ASCII.GetString(ReqState.Buffer, 0, iLen))
' End If
' sBuf = ReqState.Data.ToString
' End If
' iLen = Sck.Receive(ReqState.Buffer, BUFFER_SIZE, SocketFlags.None)
' Loop
' End If
' Catch ex As Exception
' DisplayException("The following error occurred while trying to post the requested data", ex)
' End Try
'End Sub
Private Shared Sub RequestCallback(ByVal AsyncResult As IAsyncResult)
Dim ReqState As RequestState = CType(AsyncResult.AsyncState, RequestState)
If bCancel Then
ReqState.Request.Abort()
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTABORTED, 0, 0, 0)
ReqThread.Abort()
Exit Sub
End If
Try
Dim StreamResponse As Stream = ReqState.Request.EndGetRequestStream(AsyncResult)
Dim ASCIIEnc As New ASCIIEncoding
Dim bPostData As Byte() = ASCIIEnc.GetBytes(sPostData)
StreamResponse.Write(bPostData, 0, sPostData.Length)
StreamResponse.Close()
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTINGHEADER, 0, 0, 0)
AsyncResult = CType(ReqState.Request.BeginGetResponse(AddressOf ResponseCallback, ReqState), IAsyncResult)
Catch we As WebException
'- Make The Response Available For Analizing Afterwards
ReqState.Response = we.Response
'- Try And Retreive A Error Number To Pass Back Via The Status CallBack
Dim iErrNum As Integer = 0
Dim reqType As System.Type = we.Response.GetType()
Select Case LCase(reqType.Name)
Case "httpwebresponse"
iErrNum = CType(we.Response, HttpWebResponse).StatusCode
End Select
'- Notify Owner Of Failed Request
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTFAILED, 0, 0, iErrNum)
'- End This Thread
ReqThread.Abort()
End Try
End Sub
Private Shared Sub ResponseCallback(ByVal AsyncResult As IAsyncResult)
Dim ReqState As RequestState = CType(AsyncResult.AsyncState, RequestState)
If bCancel Then
ReqState.Request.Abort()
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTABORTED, 0, 0, 0)
ReqThread.Abort()
Exit Sub
End If
Try
ReqState.Response = ReqState.Request.EndGetResponse(AsyncResult)
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_HEADERRECEIVED, 0, IIf(bResume, ReqState.Response.ContentLength + ReqState.lResumeStart, ReqState.Response.ContentLength), 0)
'- Smart Redirection
If bUseSmartRedirection Then
Select Case ReqState.Response.StatusCode
Case HttpStatusCode.Found, HttpStatusCode.Moved, HttpStatusCode.MovedPermanently
'- Invoke The Status Callback
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_HEADERRECEIVED, 0, ReqState.Response.ContentLength, 0)
'- Change URL To Absolute If Relative
Dim i As Integer
Dim sNewUrl As String = ReqState.Response.Headers.Item("Location")
If Not IsValidUrl(sNewUrl) Then
sNewUrl = ReqState.Response.ResponseUri.Scheme & ReqState.Response.ResponseUri.SchemeDelimiter & ReqState.Response.ResponseUri.Host
sNewUrl = sNewUrl & ReqState.Request.RequestUri.LocalPath
sNewUrl = sNewUrl & ReqState.Response.Headers.Item("Location")
End If
'- Create New Request With The New Address
Dim NewReq As HttpWebRequest = HttpWebRequest.Create(sNewUrl)
NewReq.Proxy = ReqState.Request.Proxy
NewReq.UserAgent = ReqState.Request.UserAgent
NewReq.PreAuthenticate = ReqState.Request.PreAuthenticate
NewReq.Credentials = ReqState.Request.Credentials
NewReq.Referer = ReqState.Request.RequestUri.ToString
'- Include Any Cookies Received
Dim sCookie() As String
sCookie = ReqState.Response.Headers.GetValues("Set-Cookie")
If Not sCookie Is Nothing Then
For i = 0 To UBound(sCookie)
NewReq.Headers.Add("Cookie: " & sCookie(i))
Next i
End If
Erase sCookie
ReqState.Request = NewReq
'- Request The New Address
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTINGHEADER, 0, 0, 0)
AsyncResult = CType(ReqState.Request.BeginGetResponse(AddressOf ResponseCallback, ReqState), IAsyncResult)
Exit Sub
End Select
End If
'- Setup OutputFile If Needed
If sOutputFile <> "" Then
If bResume Then
ReqState.ByteLen = ReqState.lResumeStart
ReqState.OutputFileStream = New FileStream(sOutputFile, FileMode.Append, FileAccess.Write, FileShare.None)
Else
ReqState.OutputFileStream = New FileStream(sOutputFile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)
End If
ReqState.Data.Append(sOutputFile)
Else
ReqState.OutputFileStream = Nothing
If bResume Then
ReqState.Data.Append(sResumeData)
ReqState.ByteLen = sResumeData.Length
End If
End If
ReqState.ResponseStream = ReqState.Response.GetResponseStream()
Dim aResult As IAsyncResult = ReqState.ResponseStream.BeginRead(ReqState.Buffer, 0, BUFFER_SIZE, AddressOf ReadCallBack, ReqState)
Catch we As WebException
'- Make The Response Available For Analizing Afterwards
ReqState.Response = we.Response
Dim iErrNum As Integer = CType(we.Response, HttpWebResponse).StatusCode
'- Notify Owner Of Failed Request
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTFAILED, 0, 0, iErrNum)
'- End This Thread
ReqThread.Abort()
End Try
End Sub
Private Shared Sub ReadCallBack(ByVal AsyncResult As IAsyncResult)
Dim ReqState As RequestState = CType(AsyncResult.AsyncState, RequestState)
If bCancel Then
ReqState.Request.Abort()
If Not ReqState.ResponseStream Is Nothing Then ReqState.ResponseStream.Close()
If Not ReqState.OutputFileStream Is Nothing Then ReqState.OutputFileStream.Close()
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_REQUESTABORTED, 0, 0, 0)
ReqThread.Abort()
Exit Sub
End If
Dim iLen As Integer = ReqState.ResponseStream.EndRead(AsyncResult)
If iLen > 0 Then
'- Add Length To The Amount Received
ReqState.ByteLen = ReqState.ByteLen + iLen
'- Write Data To File Or Save To Buffer
If Not ReqState.OutputFileStream Is Nothing Then
ReqState.OutputFileStream.Write(ReqState.Buffer, 0, iLen)
Else
ReqState.Data.Append(Encoding.ASCII.GetString(ReqState.Buffer, 0, iLen))
End If
'- Calculate The Percent Complete
Dim lTotalLen As Long
Dim iPercent As Integer
If ReqState.Response.ContentLength > 0 Then
If bResume Then
lTotalLen = ReqState.Response.ContentLength + ReqState.lResumeStart
Else
lTotalLen = ReqState.Response.ContentLength
End If
iPercent = CInt((ReqState.ByteLen / lTotalLen) * 100)
Else
iPercent = 0
End If
'- Invoke The Status Callback
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_DOWNLOADING, ReqState.ByteLen, lTotalLen, iPercent)
'- Continue Reading
Dim aResult As IAsyncResult = ReqState.ResponseStream.BeginRead(ReqState.Buffer, 0, BUFFER_SIZE, AddressOf ReadCallBack, ReqState)
Else
'- Close Response & File Streams
ReqState.ResponseStream.Close()
If Not ReqState.OutputFileStream Is Nothing Then ReqState.OutputFileStream.Close()
'- Invoke The Status Callback
If Not ReqState.StatusCallback Is Nothing Then ReqState.StatusCallback.Invoke(ReqEvent.SE_COMPLETED, ReqState.ByteLen, ReqState.Response.ContentLength, 100)
'- End The Thread
ReqThread.Abort()
End If
End Sub
Private Shared Sub DisplayException(ByRef sInfo As String, ByVal Ex As Exception)
Call MsgBox(sInfo & vbCrLf & vbCrLf & "Source: " & Ex.Source & vbCrLf & Ex.Message, MsgBoxStyle.Exclamation)
End Sub
Private Shared Function IsValidUrl(ByRef sURL As String) As Boolean
Return System.Text.RegularExpressions.Regex.IsMatch(sURL, "(http|https)://([\w-]+\.)+(/[\w- ./?%&=]*)?")
End Function
Private Function UrlEncode(ByRef URLText As String) As String
Dim AscCode As Integer
Dim EncText As String
Dim bStr() As Byte = Encoding.ASCII.GetBytes(URLText)
Dim i As Long
For i = 0 To UBound(bStr)
AscCode = bStr(i)
Select Case AscCode
Case 48 To 57, 65 To 90, 97 To 122
EncText = EncText & Chr(AscCode)
Case 32
EncText = EncText & "+"
Case Else
If AscCode < 16 Then
EncText = EncText & "%0" & Hex(AscCode)
Else
EncText = EncText & "%" & Hex(AscCode)
End If
End Select
Next i
Erase bStr
Return EncText
End Function
'====================================================================
Public Function FormatMilliSec(ByRef lMS As Long) As String
Dim i As Single
Dim sUnit As String
i = lMS
sUnit = ""
If i > 1000 Then i = i / 1000 Else If sUnit = "" Then sUnit = " ms"
If i > 60 Then i = i / 60 Else If sUnit = "" Then sUnit = " sec"
If i > 60 Then i = i / 60 Else If sUnit = "" Then sUnit = " min"
If i > 60 Then i = i / 60 Else If sUnit = "" Then sUnit = " hours"
i = System.Math.Round(i, 2)
Return CStr(i & sUnit)
End Function
Public Function FormatBytes(ByRef lBytes As Long) As String
Dim i As Single
Dim sUnit As String
i = lBytes
sUnit = ""
If i > 1024 Then i = i / 1024 Else If sUnit = "" Then sUnit = " Bytes"
If i > 1024 Then i = i / 1024 Else If sUnit = "" Then sUnit = " KB"
If i > 1024 Then i = i / 1024 Else If sUnit = "" Then sUnit = " MB"
If i > 1024 Then i = i / 1024 Else If sUnit = "" Then sUnit = " GB"
i = System.Math.Round(i, 2)
Return CStr(i & sUnit)
End Function
Public Sub AddPostData(ByVal sName As String, ByVal sValue As String)
Dim sDat As String = UrlEncode(sName) & "=" & UrlEncode(sValue)
sPostData = sPostData & IIf(sPostData = "", sDat, "&" & sDat)
End Sub
End Class
[/LEFT]
حالا شما می تونید برید سراغ کار اصلی
شما فرض کنید می خواید به یه سایت وصل شید برای این کار باید یه درخواست به سرور بفرستید!که محتویات درخواست شما رو داره!
مثلا برای سرور ورژن برنامه فعلی و یا اسم یوزر رو می فرستید!
برای این کار شما دو تا روش دارید:
1-با Query String بفرستیدکه برای این کار می تونید در انتهای لینک سایت به صورت Query اطلاعات رو بفرستید که خوب قاعدتا محدودیت داره!
2-با Post برای این کار توی خود همون کلاس یه sub تعریف شده به نام: AddPostDate
طرز کارش به این صورته:
.addpostdata(“name”,”Value”)
شما به این طریق میتونید اطلاعات رو سند کنید!
ولی میرسیم به بخش بازیابی اطلاعات.
برای این کار در همون کلاس یه متد وجود داره به نام OutputFile
این متد یه آرگمان ورودی داره که فایل رو مشخص میکنه!
شما بعد از اینکه خروجی رو گرفتید میتونید ازش هرجوری کهدوست دارید استفاده کنید!
اینم یه نمونه کد برای این برنامه یه برنامه نمونه هم گذاشتم!
کد:
[LEFT]
Public Sub ReqCallBack(ByVal StatusEvent As ReqEvent, ByVal lBytesComplete As Long, ByVal lBytesTotal As Long, ByVal iPercent As Integer)
Select Case StatusEvent
Case ReqEvent.SE_REQUESTINGHEADER
lblStatusText.Text = "Requesting..."
Case ReqEvent.SE_POSTINGDATA
lblStatusText.Text = "Posting Data..."
Case ReqEvent.SE_DOWNLOADING
lblStatusText.Text = "Downloading..."
Case ReqEvent.SE_COMPLETED
lblStatusText.Text = "Finished"
MsgBox("Sending was success full!" & vbCrLf & "See the text file that created in bin Folder that name is Login.txt")
PictureBox1.Visible = False
wr = Nothing
Case ReqEvent.SE_REQUESTFAILED
lblStatusText.Text = "Request Failed! (" & iPercent & ")"
wr = Nothing
Case ReqEvent.SE_REQUESTABORTED
lblStatusText.Text = "Download Canceled!"
wr = Nothing
End Select
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PictureBox1.Visible = True
Dim txtrequest As String = "http://live-code.ir/majidtt.asp?username=" & TextBox1.Text & "&password=" & TextBox2.Text
wr = New clsWebRequest(txtrequest)
If Not wr.RequestObj Is Nothing Then
'- Set The Status Callback Address
wr.StatusCallBack = AddressOf ReqCallBack
'- Use Smart Auto Redirection (Cookie Support)
wr.UseSmartRedirection = True
'- Enable/Disable File Saving
wr.OutputFile = "LOGIN.txt"
'- Make The Request
wr.ProcessRequest()
End If
End Sub
[/LEFT]
برای عزیزانی که برنامه VS.Net رو ندارند کامپایل شده رو گذاشتم!
امید وارم مورد استفاده واقع بشه!
.:مسعود:.
www.elol.ir Team Programer