Hi Martin
Yes, It is a VB.Net app
This is the full rtn's code..
Thanks
Neal
Dim result As WebResponse
Dim req As WebRequest
Dim RequestStream As Stream
Dim ReceiveStream As Stream
Dim encode As Encoding
Dim sr As StreamReader
Dim SomeBytes() As Byte
Dim UrlEncoded As New StringBuilder()
Dim reserved() As Char = {ChrW(63), ChrW(61), ChrW(38)}
req = WebRequest.Create(url)
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded" 'The
ContentType property contains the media type of the request
Dim strResult As String
Try
Dim i As Integer = 0
If payload <> Nothing Then
Dim j As Integer
While i < payload.Length
j = payload.IndexOfAny(reserved, i)
If j = -1 Then
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Su bstring(i, payload.Length -
i)))
Exit While
End If
UrlEncoded.Append(HttpUtility.UrlEncode(payload.Su bstring(i, j - i)))
UrlEncoded.Append(payload.Substring(j, 1))
i = j + 1
End While
SomeBytes =
System.Text.Encoding.UTF8.GetBytes(UrlEncoded.ToSt ring())
req.ContentLength = SomeBytes.Length
RequestStream = req.GetRequestStream()
RequestStream.Write(SomeBytes, 0, SomeBytes.Length)
RequestStream.Close()
Else
req.ContentLength = 0
End If
'-- Response Object
result = req.GetResponse()
ReceiveStream = result.GetResponseStream()
encode = System.Text.Encoding.GetEncoding("utf-8")
sr = New StreamReader(ReceiveStream, encode)
Dim xr As New XmlTextReader(New StreamReader(ReceiveStream,
encode))
xr.Normalization = True
If xr.CanResolveEntity Then
xr.ReadStartElement()
strResult = strResult & xr.Value
End If
' 'For DTD....
' Dim vreader As New XmlValidatingReader(xr)
' Dim resolver As New XmlUrlResolver()
' vreader.XmlResolver = resolver
' If vreader.CanResolveEntity Then
' Dim attrCnt As Integer = vreader.AttributeCount
' Dim xBaseUri As String = vreader.BaseURI.ToString
' Dim yLocalNodeName As String = vreader.LocalName.ToString
' Dim sNdType As String = vreader.NodeType.ToString
' 'While vreader.read 'reads the next node from the
stream
' strResult = strResult & vreader.ReadInnerXml() '=
nothing
' strResult = strResult & vreader.Value
'' strResult = strResult & vreader.
' 'End While
' While xr.Read
' strResult = strResult & xr.ReadInnerXml 'str
' 'error: there is invalid data at the root level,
line 1,position 1
' End While
' End If
Catch Exc As Exception
Throw New Exception(Exc.Message)
Finally
If Not result Is Nothing Then
result.Close()
End If
If Not RequestStream Is Nothing Then
RequestStream.Close()
End If
If Not ReceiveStream Is Nothing Then
ReceiveStream.Close()
End If
End Try
Return strResult
"Martin Honnen" wrote:
Neal wrote:
I try retrieve an XML stream from a webapp
using a post
"http://webedu.its.uct.ac.za/webct/public/serve_webctdb?OPERATION=homearea_xml&DB=global&Web CT%20ID=rodgersn_its_main&AUTH=ee09aabc77ef593917a 60720f167c733"
That is a URL with a query string so we only know the URL and any data
send with a HTTP GET request. When I load that URL with IE 6 which
parses the XML with MSXML 3 it is loaded without errors. Thus if you get
and
result = req.GetResponse()
ReceiveStream = result.GetResponseStream()
from here ..I try read the XML retrieved, but...
I've tried XMLStream and XMLValidatingStream..both return
"There is invalid data at the root level"
errors with .NET then perhaps the server sends a different response
after your POST request, perhaps an HTTP response with an error code and
a text/html response body which the XML parser can't parse.
So we need to see exactly what you do to see what could go wrong.
Trying a std StreamReader with say .readtoend or
sr.Read(read, 0, 256) in a count loop, I get an error "too few parameters"
on the
string result of the read.
What language are you using? With VB.NET I think you need
Dim responseText As String
responseText = sr.ReadToEnd()
if you want to use a StreamReader.
--
Martin Honnen
http://JavaScript.FAQTs.com/