/// <summary> /// The query data. /// </summary> /// <param name="request"> /// The request. /// </param> /// <param name="progressChangedHandler"> /// The progress changed handler. /// </param> /// <returns> /// The <see cref="DataRequestResult"/>. /// </returns> public override DataRequestResult QueryData(FlightFareRequest request, JourneyProgressChangedEventHandler progressChangedHandler) { byte[] postData = this._generator.GeneratePOSTData(request); var httpRequest = (this._request_ + "1").GetRequest("POST"); httpRequest.CookieContainer = new CookieContainer(); httpRequest.Referer = this._root_; httpRequest.ContentLength = postData.Length; Stream stream = httpRequest.GetRequestStream(); stream.Write(postData, 0, postData.Length); stream.Close(); string tokenId = null; string requestId = null; using (var response = (HttpWebResponse)httpRequest.GetResponse()) { string waitUri = response.ResponseUri.ToString(); requestId = this.GetTicketId(response); response.Close(); if (string.IsNullOrEmpty(requestId)) { return new DataRequestResult(DataRequestState.Failed, null); } var match = Regex.Match(waitUri, @"\?" + this._cookie_ + @"\=(?<id>.+?)\&", RegexOptions.IgnoreCase); if (match.Success) { tokenId = match.Groups["id"].Value; } else { var cookies = response.Cookies; foreach (Cookie c in cookies) { if (c.Name == this._cookie_) { tokenId = c.Value; break; } } } } DataRequestResult requestResult; do { requestResult = this.GetResult(requestId, tokenId, request); } while (requestResult.RequestState == DataRequestState.Pending || requestResult.RequestState == DataRequestState.Requested); return requestResult; }
/// <summary> /// Query fare data asynchronously /// </summary> /// <param name="request"> /// </param> /// <param name="progressChangedHandler"> /// The progress Changed Handler. /// </param> /// <returns> /// The <see cref="DataRequestResult"/>. /// </returns> public abstract DataRequestResult QueryData(FlightFareRequest request, JourneyProgressChangedEventHandler progressChangedHandler);