title: XMLHTTP Request (POST) to retrieve data from web site using VBScript
body: <p>dear collegues! I need your help.</p>
  
  <p>Fisrt of all, this is NOT ad. I try to make a POST request on website of railway tickets <a href="http://booking.uz.gov.ua/en/" rel="nofollow">http://booking.uz.gov.ua/en/</a> to know if there is tickets on current date. BUT... have a problem. I'm using a VBScript to make a request. To know what HTTP Header and POST request to send on website I used Chrome in-build development tools. </p>
  
  <p>Here's my script:</p>
  
  <pre><code>    Dim URL
      Dim URL2
      Dim URL3
      Dim sRequest
      Dim sCookies
  
      'This is web page where I need to enter information.
      URL = "http://booking.uz.gov.ua/en/"
      'This is path that Chrome shows to send POST request.
      URL2 = "http://booking.uz.gov.ua/en/purchase/search/"
      'Optional URL, Chrome shows this link near of URL2. I think this is .js that works                 on info I enter on web site (URL).
      'URL3 = "http://booking.uz.gov.ua/i/js/common.138.js"
      'POST request that Chrome shows to send.
      sRequest ="station_id_from=2200001&amp;station_id_till=2208001&amp;station_from=Kyiv&amp;station_till=Odesa&amp;date_        dep=09.19.2013&amp;time_dep=00%3A00&amp;search="
      'Here I'm using GET request to retrieve Set-Cookie Header (SessionID first of all)         to reuse in my second POST request.
      sCookies = GetSetHeader(URL)
      'Here I'm calling function to make POST request.
      Result = HTTPPost(URL2, sRequest)
  
      Function GetSetHeader(URL)
         Set objhttp = CreateObject("Microsoft.XmlHttp")
         objhttp.open "GET", URL, FALSE
         objhttp.Send
         'I'm getting only SessionID + other cookies that Chrome shows.
         GetSetHeader = Left (objhttp.getResponseHeader("Set-Cookie"), 38) &amp; " " &amp;         "HTTPSERVERID=server1; _gv_lang=en;         __utma=31515437.675496133.1376934004.1376934004.1376934004.1;         __utmb=31515437.2.10.1376934004; __utmc=31515437; __utmz=31515437.1376934004.1.1.utmcsr=        (direct)|utmccn=(direct)|utmcmd=(none)"
      End Function
  
      Function HTTPPost(URL2, sRequest) 
         'Header I just took from Chrome.
         Set objhttp = CreateObject("Microsoft.XmlHttp")
         objHTTP.open "POST", URL2, false
         objHTTP.setRequestHeader "Connection", "keep-alive"
         objHTTP.setRequestHeader "Host", "booking.uz.gov.ua"
         objHTTP.setRequestHeader "Connection", "keep-alive"
         objHTTP.setRequestHeader "Content-Length", "Len(Request)"
         objHTTP.setRequestHeader "GV-Token", "64214392f178b9f91e3b61a069915cd1"
         objHTTP.setRequestHeader "Origin", "http://booking.uz.gov.ua"
         objHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64)         AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36"
         objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
         objHTTP.setRequestHeader "GV-Unique-Host", "1"
         objHTTP.setRequestHeader "GV-Ajax", "1"
         objHTTP.setRequestHeader "GV-Screen", "1366x768"
         objHTTP.setRequestHeader "GV-Referer", "http://booking.uz.gov.ua/en/"
         objHTTP.setRequestHeader "Accept", "*/*"
         objHTTP.setRequestHeader "Referer", "http://booking.uz.gov.ua/en/"
         objHTTP.setRequestHeader "Accept-Encoding", "gzip,deflate,sdch"
         objHTTP.setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-        US;q=0.6,en;q=0.4"
         'Here I use cookies retrieved with first GET request.
         objHTTP.setRequestHeader "Cookie", "sCookies"
         objHTTP.send sRequest
         'I use this msg to check that right cookies send with POST request.
          WScript.Echo sCookies
          HTTPPost =  objHttp.responseText
         'Write answer to TXT file.
         Set FSO = CreateObject("Scripting.FileSystemObject")
         Set oFile = FSO.OpenTextFile("D:\Results.txt", 2, True)
         oFile.Write(objHttp.responseText)
         oFile.Close
         Set oFile = Nothing
         Set FSO = Nothing
      end Function
  </code></pre>
  
  <p>I can't make me script work. I get empty TXT file if I use URL2 to send a request. If I use URL3 - path to script that Chrome show me - to send a request, I just receive a contents of common.138.js in my TXT file. But I expect to receive info in JSON type like shown in Chrome response.</p>
  
  <p>What I noticed, 
  First, if refresh the website, and try to resend old request, I give me an error:</p>
  
  <p>NetworkError: 400 Bad Request - <a href="http://booking.uz.gov.ua/en/purchase/search/" rel="nofollow">http://booking.uz.gov.ua/en/purchase/search/</a>"</p>
  
  <p>Maybe because SessionID changed.</p>
  
  <p>Second, I can't to simply write name of station, I need to chose it from drop-down list (When work with this site in UI mode). OR I get an error - Select a departure point from a drop down list.</p>
  
  <p>Third, if try to send request by simply clicking the button on site to search, I get error Status Code:400 Bad Request. I think time of SessionID expired.</p>
  
  <p>There is a working script using InternetExplorer.Application system object, but it is no decision. I want to make it work by sending requests. In future want to try do it on php (as a peart of learning process).</p>
  
  <p>Maybe it's some kind of defence from people like me??? There is a way to make my script work???? Maybe SessionID changes between GET and POST requests?? Or maybe VBScript can't resolve it and I need PHP, for example??? </p>
  
  <p>I don't know how to solve this problem. Help me please. Can't sleep. Can't eat. Thanks very very much.</p>