'-----------------------------------------------------------------------
' This file is part of the Microsoft .NET Framework SDK Code Samples.
'
' Copyright (C) Microsoft Corporation. All rights reserved.
'
'This source code is intended only as a supplement to Microsoft
'Development Tools and/or on-line documentation. See these other
'materials for detailed information regarding Microsoft code samples.
'
'THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
'KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
'IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
'PARTICULAR PURPOSE.
'-----------------------------------------------------------------------
Imports System
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Web
Imports Microsoft.VisualBasic
Namespace Microsoft.Samples.QuickStart.HowTo.Net.WebRequests
NotInheritable Class ClientPost
Private Sub ClientPost()
End Sub
Public Shared Sub Main()
Dim args As String()
args = Environment.GetCommandLineArgs()
If (args.Length < 2) Then
ShowUsage()
Else
If args.Length < 3 Then
GetPage(args(1), "sl=foo&s2=bar")
Else
GetPage(args(1), args(2))
End If
End If
Console.WriteLine()
Console.WriteLine("Press any key to continue...")
Console.ReadLine()
End Sub
Private Shared Sub ShowUsage()
Console.WriteLine("Attempts to POST to a URL")
Console.WriteLine()
Console.WriteLine("Usage:")
Console.WriteLine("ClientPOST URL [postdata]")
Console.WriteLine()
Console.WriteLine("Examples:")
Console.WriteLine("ClientPOST http://www.nba.com [s1=foo&s2=bar]")
End Sub
Private Shared Sub GetPage(ByVal url As String, ByVal payload As String)
Dim requestStream As Stream = Nothing
Dim response As WebResponse = Nothing
Dim reader As StreamReader = Nothing
Try
Dim request As WebRequest = WebRequest.Create(url)
request.Method = WebRequestMethods.Http.Post
request.ContentType = "application/x-www-form-urlencoded"
Dim SomeBytes() As Byte
Dim UrlEncoded As New StringBuilder
Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
If payload <> Nothing Then
Dim i As Integer = 0
Dim j As Integer
While i < payload.Length
j = payload.IndexOfAny(reserved, i)
If j = -1 Then
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, payload.Length - i)))
Exit While
End If
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, j - i)))
UrlEncoded.Append(payload.Substring(j, 1))
i = j + 1
End While
SomeBytes = System.Text.Encoding.UTF8.GetBytes(UrlEncoded.ToString())
request.ContentLength = SomeBytes.Length
requestStream = request.GetRequestStream()
requestStream.Write(SomeBytes, 0, SomeBytes.Length)
requestStream.Close()
Else
request.ContentLength = 0
End If
response = request.GetResponse()
Dim responseStream As Stream = response.GetResponseStream()
reader = New StreamReader(responseStream)
Console.WriteLine()
Console.WriteLine("Response stream received")
Dim buffer(256) As Char
Dim count As Integer = reader.Read(buffer, 0, buffer.Length)
Console.WriteLine("HTML...")
Console.WriteLine()
Do While count > 0
Console.Write(New String(buffer, 0, count))
count = reader.Read(buffer, 0, buffer.Length)
Loop
Console.WriteLine("")
Catch Exc As UriFormatException
Console.WriteLine()
Console.WriteLine("The request URI was malformed.")
Catch Exc As WebException
Console.WriteLine()
Console.WriteLine("The request URI could not be found.")
Catch Exc As IOException
Console.WriteLine()
Console.WriteLine("The request URI could not be retrieved.")
Finally
If requestStream IsNot Nothing Then
requestStream.Close()
End If
If response IsNot Nothing Then
response.Close()
End If
If reader IsNot Nothing Then
reader.Close()
End If
End Try
End Sub
End Class
End Namespace
|