Solved

Please help a newbie

Posted on 2000-05-07
4
135 Views
Last Modified: 2010-05-02
Hi guys, Newbie here,

I am using Visual Basic 6.0(SP3) and am using the inet.execute "POST" function to send some name=value pair variables to a VB CGI script. I didn't write the CGI script but this is what it looks like to get the input

****************************************************

Public Function CGIStdIn() As String

Dim lngStdInput As Long                 ' Handle of Standard Input
Dim strStdInput As String               ' String of Standard Input
Dim lngNumberOfBytesToRead As Long      ' Number of bytes in standard input
Dim lngNumberOfBytesRead As Long        ' Number of bytes read in standard input
Dim typOverlapped As OVERLAPPED         ' Structure used in ReadFile() function call
Dim lngResult As Long                   ' Did Standard Input Work?

    On Error Resume Next
   
    lngStdInput = GetStdHandle(STD_INPUT_HANDLE)    ' Get standard input handle
    CGIStdIn = ""
   
    If lngStdInput > -1 Then                        ' If a valid handle was found

' Find out how big the input stream is

        lngNumberOfBytesToRead = CLng(Environ("CONTENT_LENGTH"))
       
' Initialize string variable to store the standard input stream

        strStdInput = String(lngNumberOfBytesToRead, " ")
        lngResult = ReadFile(lngStdInput, strStdInput, lngNumberOfBytesToRead, _
                        lngNumberOfBytesRead, typOverlapped)
        strStdInput = RTrim(strStdInput)            ' Get rid of any trailing spaces
        CGIStdIn = strStdInput       ' Return standard input stream
    End If

    If CGIStdIn <> "" Then
   
' Add the tail of the string if <CR> was hit instead of the login button
       
        If Right(CGIStdIn, 1) <> "&" Then
            CGIStdIn = CGIStdIn & "&Login_Submit=Login"
        End If
    End If

End Function

*****************************************

Now here's the problem, it works fine when you push the login button from the browser, but when I try to use my VB application to post info to the script, all I get is a No response timeout. Can anyone help me with a reason why the VB CGI script does not like this POST?

I'm pretty sure my code should work, all indications from examples suggest it should.

Private Sub cmdPOST_Click()
   picTic.Visible = True
   txtData.Text = ""
   
   Dim fnum As Integer
   Dim file_name As String
   Dim got_file As Boolean
   Dim txt As String

    ' Get the file's name.
    file_name = App.Path
    If Right$(file_name, 1) <> "\" Then file_name = file_name & "\"
    file_name = file_name & "logins.txt"
   
    ' Open the file.
    fnum = FreeFile
    On Error Resume Next
    Open file_name For Input As fnum
    got_file = (Err.Number = 0)
    On Error GoTo 0

    If got_file Then
        ' Read the text.
        Do Until EOF(fnum)
        Dim i As Integer
        Dim sArray As Variant
            Input #fnum, txt
            sArray = Split(txt)
            txtRemotePath.Text = "MNO=" & sArray(0) & "&PWD=" & sArray(1) _
            & "&BSB=NTV25"
        Loop
        ' Close the file.
    Close fnum
    End If
   
   Inet1.Execute txtURL.Text, "POST", txtRemotePath.Text, _
   "enctype: application/x-www-form-urlencoded"
   
    Exit Sub

End Sub

Thanks in advance
nathan
0
Comment
Question by:GnatMan
  • 2
  • 2
4 Comments
 
LVL 32

Accepted Solution

by:
Erick37 earned 100 total points
ID: 2787032
The method you are using looks OK.  Perhaps there is something wrong with the parameters.  Try hardcoding the URL and post data to see if this is the case.  I tried a POST to Altavista, and it seems to work fine:

Option Explicit

Private Sub Command1_Click()
    Dim sURL As String, sPost As String, sHeader As String
    sURL = "http://www.altavista.com/cgi-bin/query"
    sPost = "pg=q&sc=on&hl=on&q=%2Bvb&kl=XX&stype=stext"
    sHeader = "Content-Type: application/x-www-form-urlencoded"
     
    Inet1.Execute sURL, "POST", sPost, sHeader
   
    Command1.Enabled = False
End Sub

Private Sub Form_Load()
    'RichTextBox (rtb) for reading response
    rtb.RightMargin = Screen.Width * 2
    rtb.Left = 0
    ''Set at design time
    ''rtb.ScrollBars = rtfBoth
End Sub

Private Sub Form_Resize()
    rtb.Width = ScaleWidth
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
    Select Case State
    Case icResponseCompleted ' 12
        Dim vtData As Variant ' Data variable.
        Dim strData As String: strData = ""
        Dim bDone As Boolean: bDone = False
   
        ' Get first chunk.
        vtData = Inet1.GetChunk(1024, icString)
        DoEvents
        Do While Not bDone
            strData = strData & vtData
            DoEvents
            ' Get next chunk.
            vtData = Inet1.GetChunk(1024, icString)
            If Len(vtData) = 0 Then
                bDone = True
            End If
        Loop
        rtb.Text = strData
        Command1.Enabled = True
   End Select
End Sub
0
 

Author Comment

by:GnatMan
ID: 2787053
Thanks for the suggestion, I hardcoded in the parameters for the POST and it didn't seem to do much good though. Any further help from anyone would be just swell..
0
 
LVL 32

Expert Comment

by:Erick37
ID: 2787215
Does the site work if you type in the POST directly into the address bar of your Browser?

e.g.

http://www.foo.com/foo?a=b&c=d
0
 

Author Comment

by:GnatMan
ID: 2787338
I've tried that, it doesn't work either, that's using the GET method though isn't it? Isn't the CGI VB script grabbing the info from STDinput from POSTed data?

Thanks
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now