Извлечение html-элемента из src с помощью веб-запроса и подстроки + indexof - PullRequest
0 голосов
/ 17 мая 2019

Здравствуйте, переполнение сообщества,

У меня небольшая проблема.Я написал класс, который представляет собой простой запрос get с параметрами для URL, реферера и файлов cookie, после чего он возвращает pagesrc, который является сообщением для моей функции извлечения строки, в которой есть параметр message, start и stop.

Вот класс:

class HttpMethods
{
    public static string Fetch(string url, string referer, ref CookieContainer cookies)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "GET";
        request.CookieContainer = cookies;
        request.UserAgent = "" ;
        request.Referer = referer;

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        cookies.Add(response.Cookies);


        string pageSrc;
        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            pageSrc = sr.ReadToEnd();
        }

        return pageSrc;
    }

}

Это моя основная функция:

    static void Main(string[] args)
    {

        CookieContainer myCookies = new CookieContainer();
        string myStr = HttpMethods.Fetch("localhost", "localhost", ref myCookies);
        void fetchStr (string message , string start, string stop)
        {
            int startIndex = message.IndexOf(start) + start.Length;
            int stopIndex = message.IndexOf(stop);
            Console.Write( message.Substring(startIndex, stopIndex - startIndex) );
        }

        fetchStr(myStr, "I am a String ", " to fetch");
        Console.ReadKey();

    }
}

Все работает нормально, когда я получаю ТОЛЬКО открытый текст, но когда я хочу получить элемент,он возвращает мне длину не может быть меньше 0, то есть ответ, когда какая-то строка не была найдена.

это действительно странно, вот пример:

            //Original Sentence : I am a string please fetch me dude.
        fetchStr(myStr, "I am a ", " fetch me dude");

Это вернет: string пожалуйста

Но когда я пытаюсь получить эту часть:

            //Original Sentence : name="_playerToken" value="a8276964-fdac-4d63-ae25-5752f157a21b" />
        fetchStr(myStr, "name=\"_playerToken\" value=\"", "\"/>");

Это вернет, длина не может быть меньше 0.

Вот скриншот из моей визуальной студии вывода:

Вывод значений Visual Studio

У кого-то есть идея, где может быть проблема?

1 Ответ

0 голосов
/ 17 мая 2019

Полностью изменив мой исходный ответ, как только что заметил, что вы пытаетесь получить /> из всего вывода html, поэтому возвращаете первый экземпляр, который он видит, а не тот, что после ключа _playerToken.

Я бы предложил вместо этого изменить метод fetchStr на запрос регулярных выражений.

String regex = "name=\"_playerToken\" value=\"([^\"]*)\"";
var match = Regex.Matches(message, regex);
if (match.Count > 0)
{
    string result = match[0].Groups[1].Value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...