Getting results from the server

P

Peter Afonin

Hello,

I have a simple client-side form that is checking the domain availability on
the domain registrar's server:

<FORM action="https://www.webnames.ru/scripts/RegTimeSRS.pl" method="post">
<input type="hidden" name="thisPage" value="pispCheckDomain">
<input type="hidden" name="username" value="test">
<input type="hidden" name="password" value="test">
domain_name: <input type="text" name="domain_name"><br>
<input type="submit" runat="server" id="Submit1" value="Submit Query"
name="Submit1">
</FORM>

It sends parameter thisPage with the value pispCheckDomain that tells the
system to check availability of a domain domain_name.

The server responds like this: Success: <domain name> is Available or
Success: <domain name> is Unavailable. I can see it on the page
https://www.webnames.ru/scripts/RegTimeSRS.pl

How can I get these results to my page using ASP.NET? There is no
information that the server returns any parameters, so I need to construct
the request myself. I usually use Request.QueryString("param") or
request.Form("param"), but in this case there is no "param" specified.
Should be pretty easy task for a web programmer, but I've never done this
before. This should be similar to querying Whois results.

I would appreciate your advice.

Thank you,
 
G

Guest

Hi Peter,
Have a look at the System.Net.HttpWebRequest object and use it to create a
form post, you can then read the response and take any action you require

HTH jd
 
P

Peter Afonin

Hi,

Thank you.

No, but I'll look at it. I've set up several systems like this, and always I
was submitting my URL as a parameter so the system would send me the
response to this address. In this case, however, it's not required, and this
is what I cannot understand.

The developer said that they are using module LWP in Perl, but he doesn't
know what to use in ASP or ASP.NET.

Peter
 
G

Guest

Hi Peter,

If I understand correctly the result you are looking for is the 'page'
output, though probably in plain text (the link you posted gives me an
error).

If you use the HttpWebRequest to post your form information (e.g the domain
you're looking for etc) to the server you get an HttpWebResponse object back.

This (httpWebResponse) object
contains among otherthings, a method called GetResponseStream which is a
System.IO.Stream containing the page output.

Read this stream using a Syatem.IO.StreamReader object to get the page body
- in this case the string "success: suchadomain.com is availiable".

You then need to parse the string probably by splitting it on space chars
and analysing the parts of the string array

HTH jd
 
P

Peter Afonin

Hi,

Thank you, I've read about this object, I guess this is exactly what I need.

I haven't tried it yet, but I will today. One thing I'm not sure about yet.

It works this way. You submit the form to
https://www.webnames.ru/scripts/RegTimeSRS.pl, it returns a page saying
something like this: Success. Domain <domain_name> is unavaliable. I have to
read this page.

This object httpWebResponse does exactly this. But the system returns the
response on the same dynamic page,
https://www.webnames.ru/scripts/RegTimeSRS.pl, so I'm not sure how it will
read it. I guess I have to try.

Thanks again,

Peter
 
P

Peter Afonin

I guess this is a better question: how should I post the form data using
HttpWebRequest object instead of the way I'm doing it now?

I've found the code sample:

Dim result As String = ""
Dim strPost As String = "x=1&y=2&z=YouPostedOk"
Dim myWriter As StreamWriter

Dim objRequest As HttpWebRequest = WebRequest.Create(url)
objRequest.Method = "POST"
objRequest.ContentLength = strPost.Length
objRequest.ContentType = "application/x-www-form-urlencoded"

Is this a way I should post it - as a string, where x, y and z are the field
names? Or am I missing something?

Thank you,

Peter
 
G

Guest

Hi Again Peter below is a function to post to a url and receive the response
(note the class I copied it from has a property called TimeOutMs which does
what it says really, waits TimeOutMs Milliseconds before aborting). As far as
I can see your form string ("x=1&y=2") seems fine. Often you would use a
NameValue (E.g Request object) Collection to collect your data before
building your string. From memory the string mustn't have a leading ampersand
(&). HTH jd

Private Function DoPostToServer(ByVal formContents As String, ByVal
postUrl As String) As String
Debug.WriteLine("DoPostToServer")
Dim sResponseString As String = ""

Dim myFormBytes() As Byte =
Text.ASCIIEncoding.ASCII.GetBytes(formContents)

Dim myRequest As Net.HttpWebRequest = Net.WebRequest.Create(postUrl)
myRequest.ContentType = "application/x-www-form-urlencoded"
myRequest.Method = "POST"
myRequest.Timeout = Me.TimeOutMs
myRequest.ContentLength = myFormBytes.Length

Dim failure As Boolean = False
Dim outputStream As IO.Stream

Try
outputStream = myRequest.GetRequestStream()
outputStream.Write(myFormBytes, 0, myFormBytes.Length)
Catch ex As Exception
failure = True
Debug.WriteLine(ex.StackTrace + " " + ex.Message)
Finally
If Not outputStream Is Nothing Then
outputStream.Close()
End If
End Try

Dim myResponse As Net.HttpWebResponse
Dim myStreamReader As IO.StreamReader
Dim inputStream As IO.Stream

If Not failure Then
Dim responseSring As String
Try
myResponse = myRequest.GetResponse
inputStream = myResponse.GetResponseStream
myStreamReader = New IO.StreamReader(inputStream)

sResponseString = myStreamReader.ReadToEnd

Catch ex As Exception
failure = True
Debug.WriteLine(ex.StackTrace + " " + ex.Message)
Finally
If Not myStreamReader Is Nothing Then

myStreamReader.Close()
End If
If Not inputStream Is Nothing Then
inputStream.Close()
End If
If Not myResponse Is Nothing Then
myResponse.Close()
End If
End Try
End If
Debug.WriteLine(sResponseString)
Return sResponseString
End Function
 
G

Guest

You could try

myWebRequestObject.AllowAutoRedirect = False

I'm wondering if the script you post to requires authentication (i.e login)
before it will let you post to it?

HTH jd
 
P

Peter Afonin

Thank you very much, I really appreciate your help! I'll try this today.

Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top