определение URL по хендлу wininet

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by gevara, 8 Sep 2007.

  1. gevara

    gevara Elder - Старейшина

    Joined:
    29 Nov 2006
    Messages:
    47
    Likes Received:
    7
    Reputations:
    5
    вобщем идёт вызов 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 запроса указывается страница и хост.

    какие есть ещё варианты?
     
    #1 gevara, 8 Sep 2007
    Last edited: 8 Sep 2007
  2. pamba

    pamba New Member

    Joined:
    8 Sep 2007
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    речь, вероятно, идет о перехвате InternetReadFile в контексте браузера с целью перехвата и подмены трафика. так вот обе эти функции должны нормально работать (и работают) и другой вариант здесь не нужен. нужно просто найти ошибку. скорее всего она перехвате функций, сопутствующих InternetReadFile вроде InternetConnect \ HttpOpenRequest \ HttpSendRequest
     
  3. gevara

    gevara Elder - Старейшина

    Joined:
    29 Nov 2006
    Messages:
    47
    Likes Received:
    7
    Reputations:
    5
    Вот смотри.

    Перехват идёт удачный. смотрел и в ольке, и трафик логировал (всё что идёт через эти апишки сохранял в файл + сохранял то, что выдаёт InternetQueryOption HttpQueryInfo). Захажу я на страницу N. в логе эта страница есть. Но адреса этой страницы нету (HttpQueryInfo и InternetQueryOption срабатывают неудачно). Причём для HttpSendRequest всё замечательно. в логах урл страницы, на которую передаются данные есть. но для InternetReadFile урл почти всегда отсутствует.

    В правильности перехвата у меня сомнений нет.
     
  4. pamba

    pamba New Member

    Joined:
    8 Sep 2007
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    надо понять чем эта страница, на которой всплывает баг отличается от всех остальных. какие у нее мета-теги, что отсылается и т.п.

    также могу предложить решение в виде костыля. создай динамический массив хэндлов HINTERNET с соответсвием к урлу, заполняй его в HttpSendRequest, очищай в InternetCloseHandle. а в InternetReadFile проверяй переданный хэндл в массиве и думай уже, нужна тебе замена или нет. решается в 25 строк. но не очень красиво