親愛なる同僚!あなたの助けが必要です。
まず第一に、これは広告ではありません。現在の日付にチケットがあるかどうかを知るために、鉄道チケットの Web サイトhttp://booking.uz.gov.ua/en/で POST リクエストを作成しようとしています。しかし... 問題があります。VBScript を使用して要求を作成しています。Web サイトで送信する HTTP ヘッダーと POST リクエストを知るために、Chrome の組み込み開発ツールを使用しました。
これが私のスクリプトです:
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&station_id_till=2208001&station_from=Kyiv&station_till=Odesa&date_ dep=09.19.2013&time_dep=00%3A00&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) & " " & "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
スクリプトを機能させることはできません。URL2 を使用してリクエストを送信すると、空の TXT ファイルが返されます。URL3 (Chrome が表示するスクリプトへのパス) を使用してリクエストを送信すると、TXT ファイルで common.138.js の内容を受け取るだけです。しかし、Chrome の応答に示されているように、JSON 型で情報を受け取ることを期待しています。
私が気づいたこと、まず、ウェブサイトを更新して古いリクエストを再送信しようとすると、エラーが発生します。
NetworkError: 400 Bad Request - http://booking.uz.gov.ua/en/purchase/search/ "
おそらく、SessionID が変更されたためです。
次に、単純に駅名を書くことはできず、ドロップダウン リストから選択する必要があります (このサイトを UI モードで操作する場合)。またはエラーが発生しました - ドロップダウンリストから出発地を選択してください。
第 3 に、検索するサイトのボタンをクリックするだけでリクエストを送信しようとすると、Status Code:400 Bad Request というエラーが表示されます。SessionID の有効期限が切れたようです。
InternetExplorer.Application システム オブジェクトを使用した動作するスクリプトがありますが、決定ではありません。リクエストを送信して機能させたい。将来的にはphpでやってみたいです(学習プロセスの一部として)。
多分それは私のような人々からのある種の防御ですか?私のスクリプトを機能させる方法はありますか???? GET リクエストと POST リクエストの間で SessionID が変わるのではないでしょうか?? あるいは、VBScript では解決できず、たとえば PHP が必要なのかもしれません。
この問題を解決する方法がわかりません。お願い助けて。眠れない。食べられません。どうもありがとうございました。