HTTPS Session Handling with PUT-Method

Choli100298
Choli100298 used Ask the Experts™
on
Hi all

I have a really urgent thing:

I should connect to a secure internet page with vb.

I have allready done some (HTML) connections with the wininet - control but all of them non secure and with GET method.

What I think I should do:

1. Log in trough the athentification site
2. Read out the session id from the response
3. Give the session ID to the header of every further call on that site.

Could you please tell me if I'm generally right?

If yes, what control can I use? Is the wininet-control able to handel PUT? how?

If now, what procedure shall I choose?


Thanx for fast answers!

choli
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Commented:
You can add post data to the navigate function. To do so you need to convert the data from a string to a byte array. Here is an extract from the MSDN about how to do it...

---

HOWTO: Automate Internet Explorer to POST Form Data
Last reviewed: January 19, 1998
Article ID: Q167658  
The information in this article applies to:
Microsoft ActiveX SDK, version 1.0
Internet Client SDK, versions 4.0, 4.01
Microsoft Internet Explorer (Programming), versions 3.0, 3.01, 3.02, 4.0


SUMMARY
An automation controller such as Microsoft Visual Basic can automate Internet Explorer (IE) to send data using the POST method to an HTTP server such as Internet Information Server (IIS). This article demonstrates how to automate IE to perform a POST of form data from Visual Basic and from a simple Visual C++ application. While the examples illustrate automation of the whole Internet Explorer application, the same techniques can be applied to the Web Browser ActiveX control when it is hosted in an application.



MORE INFORMATION
Several methods are available for sending data to an HTTP server. GET and POST are currently the most common. POST is typically used to submit form data to an HTTP server when that data exceeds the maximum allowable transfer using the GET method. This limit is typically 2K.

IE exposes the IWebBrowser(App) interface to automation controllers. The IWebBrowser(App) interface exposes a Navigate method. In interface definition language (IDL) syntax (a universal representation from which both the Visual Basic and Visual C++ syntax is derived), the Navigate method looks like the following:


   HRESULT Navigate([in] BSTR URL, [in] VARIANT* Flags,
                [in] VARIANT* TargetFrameName, [in] VARIANT* PostData,
                [in] VARIANT* Headers);


For the purposes of performing a POST, only the URL, PostData, and Headers parameters are relevant. See the Internet Client SDK documentation for information on the other parameters.
To call Navigate and POST form data to an HTTP server, the URL parameter must specify a valid address, the PostData parameter must contain a SAFEARRAY of bytes, and the Headers parameter must contain a BSTR that contains the following HTTP header:


   Content-Type: application/x-www-form-urlencoded


This header indicates that the data being posted is encoded according to the rules specified in the HTML specification.
Internet Explorer versions 3.0, 3.01, and 3.02 do not support posting data to an HTTP server via the Navigate method. WinInet and URL Monikers are two possible alternatives. For more information on WinInet and Monikers, see the REFERENCES section of this article.

Note that the Internet Explorer Script Object Model object "window" has a "navigate" method as well. This navigate method will only accept a URL and cannot be used to POST data to a web server.

To test the examples below, the following Active Server Page (ASP) should be saved to the file NAVPOST.ASP in a directory on an NT 4.0 server running Internet Information Server (IIS) version 3.0. The directory should be recognized by IIS as a virtual root with execute permission:


   <HTML>
   <%
   cFlavor = Request("Flavor")
   cName = Request("FName")
   %>
   <BODY>
   Hello, <% =cName %>. <br>
   One scoop of <% =cFlavor %> coming right up!
   </BODY>
   </HTML>


Visual Basic
To demonstrate a POST in Visual Basic, perform the following steps:


Start a new Standard EXE project in Visual Basic. Form1 is created by default. Add the following controls to Form1:

   Object                     Name                  Caption
   -------------------------------------------------------------------

   Label                      lblName                First Name
   Label                      lblFlavor              Flavor
   CommandButton              cmdSubmit              Submit

   ComboBox                   cboFlavor
   TextBox                    txtName
   TextBox                    edtPostData

   (edtPostData should be multi-line and have scroll bars)



Invoke "References" from the Project menu and add a reference to the project for "Microsoft Internet Controls" (SHDOCVW.DLL). Make sure this is done from the References dialog and not just from the Components dialog.

Insert the following code in the General Declarations section:


      Dim g_oIE As InternetExplorer ' Global reference to an
                                    ' instance of IE
      Private Sub cmdSubmit_Click()
      edtPostData.Text = ""  ' Initialize an edit box for testing
      ReDim aByte(0) As Byte ' Array of bytes to hold data to post

      ' Extract the URL encoded data from the UI,
      ' and pack it into an array of bytes
      cFlavor = cboFlavor.List(cboFlavor.ListIndex)
      cParamName = "FName="
      cParamFlavor = "Flavor="
      cSeparator = "&"
      cPostData = cParamName & txtName.Text _
         & cSeparator & cParamFlavor & cFlavor
      PackBytes aByte(), cPostData

      ' For testing, rebuild the POST data and stuff
      ' it into an edit box
      For i = LBound(aByte) To UBound(aByte)
          edtPostData = edtPostData + Chr(aByte(i))
      Next

      Dim vPost As Variant
      vPost = aByte ' Assign the byte array to a VARIANT
      Dim vFlags As Variant
      Dim vTarget As Variant
      Dim vHeaders As Variant
      vHeaders = _
         "Content-Type: application/x-www-form-urlencoded" _
         + Chr(10) + Chr(13)

      ' You're done. Now call Navigate
      ' Note: modify path to server as appropriate
      g_oIE.Navigate "http://<server>/scripts/navpost.asp", _
         vFlags, vTarget, vPost, vHeaders

      End Sub

      Private Sub Form_Load()
      ' Create an instance of IE
      Set g_oIE = New InternetExplorer
      g_oIE.Visible = True

      ' Populate a combobox with some flavor choices
      cboFlavor.List(0) = "Vanilla"
      cboFlavor.List(1) = "Chocolate"
      cboFlavor.List(2) = "Strawberry"
      cboFlavor.ListIndex = 0 ' The default choice
      End Sub

      ' Utility function to pack the data to post into an array of bytes
      Private Sub PackBytes(ByteArray() As Byte, ByVal PostData As String)
      iNewBytes = Len(PostData)
      If iNewBytes = 0 Then
         Exit Sub
      End If
      iCursize = UBound(ByteArray) - LBound(ByteArray)
      ReDim Preserve ByteArray(iNewBytes + iCursize)
      For i = 1 To iNewBytes
         ch = Mid(PostData, i, 1)
         If ch = Space(1) Then
            ch = "+"
         End If
         ByteArray(i + iCursize - 1) = Asc(ch)
      Next
      End Sub



Modify the URL in the call to Navigate as appropriate, close all running instance of IE, and choose Start from the Run menu.

Enter your name in the first name textbox, choose a flavor, and click the Submit command button. The data from the Visual Basic form will be posted to the HTTP server and the response will appear in the visible browser window.  
Commented:
' Use XML core services :
Dim HttpReq As New MSXML2.XMLHTTP
' Or Set httpReq = CreateObject("MSXML2.XMLHTTP")

HttpReq.open "POST", "https://XMLSampleServer/CatalogServer.asp", False, userID, userPW
HttpReq.send
Author of the Year 2009

Commented:
Hi Choli,
It appears that you have forgotten this question. I will ask Community Support to close it unless you finalize it within 7 days. I will ask a Community Support Moderator to:

    Split points between: rdrunner and Gunsen

Choli, if you think your question was not answered at all or if you need help, just post a new comment here; Community Support will help you.  DO NOT accept THIS comment as an answer.

EXPERTS: If you disagree with that recommendation, please post an explanatory comment.
==========
DanRollins -- EE database cleanup volunteer

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial