0

我成功解析了我想要的网站,但我无法保留这些数据,因为 30 分钟后我使用的链接不再有效。谁能解释我发生了什么,我该如何解决这个问题?我的代码是:

        WebClient wc = new WebClient();
        wc.Headers.Add("Referer", "http://sletat.ru/");//MUST BE THIS HEADER
        string result = wc.DownloadString("http://module.sletat.ru/Main.svc/GetTours?cityFromId=832&countryId=35&cities=3106&meals=&stars=&hotels=&s_adults=1&s_kids=0&s_kids_ages=&s_nightsMin=6&s_nightsMax=16&s_priceMin=0&s_priceMax=&currencyAlias=EUR&s_departFrom=26%2F06%2F2012&s_departTo=19%2F07%2F2012&visibleOperators=&s_hotelIsNotInStop=true&s_hasTickets=true&s_ticketsIncluded=true&debug=0&filter=0&f_to_id=&requestId=19446078&pageSize=20&pageNumber=1&updateResult=1&includeDescriptions=1&includeOilTaxesAndVisa=1&userId=&jskey=1&callback=_jqjsp&_1340728614816=");
        result = result.Substring(result.IndexOf("{"), result.LastIndexOf("}") - result.IndexOf("{") + 1);
        JavaScriptSerializer js = new JavaScriptSerializer();
        dynamic json = js.DeserializeObject(result);
        var prices = json["GetToursResult"]["Data"]["aaData"] as object[];
        // var operators = ((object[])json["result"]["prices"]).Cast<Dictionary<string, object>>();
        var temp = prices.ToList().Take(20).Select(x => new TableRow
        {
            Operator = (x as object[])[18].ToString(),

        }).ToList();
        string str = "";

        foreach (var tableRow in temp)
        {
            str += tableRow.Operator + "<br />";
        }
        Response.Write(str);

谢谢指教

4

1 回答 1

0

似乎链接中不断变化的部分是在服务器上生成的值,这些值在每次请求时都会发生变化。您可以获得所需的数据,而不是通过一个步骤,而是通过几个步骤,例如:

  1. 对主页执行请求http://sletat.ru
  2. 解析来自第 1 步的响应。在响应标记中,您会发现每个新请求都会更改的链接部分。
  3. 使用该数据创建您的请求并将其发送到服务器。
于 2012-06-26T17:56:06.817 回答