Прохучил эту апишку в iexplore. начал логировать трафик. Прикол в том, что чтение данных со страницы идёт каким-то идиотским образом. Считывается не вся страница целиком, в по носколько байт... причём всегда по-разному. может считаться 400 байт, а может 20. вот у меня возник вопрос: с чем это связано?
Хм.. Дело не в асинхронном режиме.. данные приходят по-порядку. и это меня вполне устраивает. проблемма в другом. допустим, мне нужно найти на странице некоторые данные. получается что эти данные вообще могут быть разорваны и найти их обычным сканированием буффера невозможно. тем более что я заранее не знаю каким образом они разорваны.. нужно придумывать что-то другое... это либо перехватывать не InternetReadFile, а подниматься выше (как я понимаю, должен существовать общий буффер, в котором хранится страница), либо сканировать буффер каким-нибудь хитрым образом...
> Хм.. Дело не в асинхронном режиме.. данные приходят по-порядку ну значит скоро на грабли наступишь .... То что данные по кускам идут, это логично Придется писать некий эмулятор, чтобы собрать все данные в одну посуду а потом их анализировать...
Как-то перехватывал InternetReadFile. Скачивал все в свой буфер, с ним уже работал, потом отдавал по назначению, эмулируя InternetReadFile, InternetQueryDataAvailable. Работало все через ж... При плохом коннекте и больших страницах браузер вобще подвисал. Также надо помнить о InternetReadFileExA, InternetReadFileExW. Вопрос к знающим людям, как это правильно реализовать? Да, еще вспомнил, некоторые серверы поддерживают gzip сжатие контента, тут вообще ничего не посканируешь...
Почему? Просто нужно сказать серверу что браузер не понимает gzip или динамически распаковывать и ... но помоему первый способ проще.
Вобщем есть идея перехватывать трафик не на InternetReadFile, а на функциях обработки буффера. то есть когда уже браузер преобразует буффер в html страницу и показывает на экран... эксплорер, вроде, даже специальную библиотеку юзает для преобразования html кода... по идее трафик можно перехватывать именнго здесь, если я не ошибаюсь. Какие есть идеи по этому поводу?
Распаковывать/запаковывать это shit. А вот правка заголовка это можно, если не ошибаюсь, Accept Types передается в HttpOpenRequestA. Мысль. Если надо просто наблюдать контент, то можно и InternetReadFile складывать куски в буфер. Если надо найти определенную подстроку, то можно искат по кускам, с учетом, что она может быть разорвана. Т.е. искать подстроку в одном куске, потом остаток куска, который меньше подстроки запомнить, и поиск в следующем куске начинать с этого остатка. При необходимости вставить свои данные и скорректировать размер для InternetReadFile и InternetQueryDataAvailable.
Это действие в лоб. То, что первое приходит в голову. В принципе идея не плохая, но отлаживать всё это... Во-первых одна и та-же страница может быть открыта несколько раз. Во-вторых мы конечно же рассчитываем на то, что данные со страницы идут по порядку. В-третьих меня смущает здесь большое количество глобальных переменных. А самое главное - мало того, что эти данные нужно найти, их ещё нужно и подменить... получается что мы телегу ставим впереди лошади..
И что с того? А они могут еще идти не по порядку? Я такого ни разу не наблюдал. Сервер ведь отдает контент по порядку, значит и InternetReadFile должен также отдавать. Просто у меня стояла задача вставить данные не изменяя исходных, после заданной подстроки. Как у тебя там с обработкой буфера выше InternetReadFile?