вобщем идёт вызов InternetReadFile. первым параметром ей передаётся hRequest. Как можно по этому hRequest определить url страницы, с которой и считываются данные? есть вариант InternetQueryOption(hRequest,INTERNET_OPTION_URL,pUrlPath,&UrlPathSize); или HttpQueryInfo(hRequest,HTTP_QUERY_URL,pUrlPath,&UrlPathSize); но эти апишки часто выдают ERROR_HTTP_HEADER_NOT_FOUND. причём пробовал вызывать эти ф-ии как до, так и после вызова InternetReadFile. Есть ли ещё варианты? Вообще, с точки зрения здравого смысла, тут проблемм быть не должно, так как при отсылке http запроса указывается страница и хост. какие есть ещё варианты?
речь, вероятно, идет о перехвате InternetReadFile в контексте браузера с целью перехвата и подмены трафика. так вот обе эти функции должны нормально работать (и работают) и другой вариант здесь не нужен. нужно просто найти ошибку. скорее всего она перехвате функций, сопутствующих InternetReadFile вроде InternetConnect \ HttpOpenRequest \ HttpSendRequest
Вот смотри. Перехват идёт удачный. смотрел и в ольке, и трафик логировал (всё что идёт через эти апишки сохранял в файл + сохранял то, что выдаёт InternetQueryOption HttpQueryInfo). Захажу я на страницу N. в логе эта страница есть. Но адреса этой страницы нету (HttpQueryInfo и InternetQueryOption срабатывают неудачно). Причём для HttpSendRequest всё замечательно. в логах урл страницы, на которую передаются данные есть. но для InternetReadFile урл почти всегда отсутствует. В правильности перехвата у меня сомнений нет.
надо понять чем эта страница, на которой всплывает баг отличается от всех остальных. какие у нее мета-теги, что отсылается и т.п. также могу предложить решение в виде костыля. создай динамический массив хэндлов HINTERNET с соответсвием к урлу, заполняй его в HttpSendRequest, очищай в InternetCloseHandle. а в InternetReadFile проверяй переданный хэндл в массиве и думай уже, нужна тебе замена или нет. решается в 25 строк. но не очень красиво