l-O_O-l Ответов: 1

Как установить дополнительные http-заголовки через chtmlview?


Я делаю свой собственный браузер. Он основан на IE CHtmlView. Мне нужно установить дополнительные http-заголовки. Я долго искал, но до сих пор не имею ни малейшего представления. Как я могу реализовать эту функцию?
Вот так просто:
Принимать: */*
test: test ==> Это мой дополнительный заголовок
User-Agent: Mozilla/5.0 (совместимый; MSIE 10.0; xxx) ==>Также мне нужно изменить User-Agent.

Что я уже пробовал:

Я попробовал в функции
CHtmlView::Navigate2(LPCTSTR lpszURL, DWORD dwFlags,LPCTSTR lpszTargetFrameName,LPCTSTR lpszHeaders,LPVOID lpvPostData, DWORD dwPostDataLen)
{
...
lpszHeaders = "test:тест";
...
}
Это будет иметь влияние, но только в первый раз перейдите по ссылке. если навигация происходит из браузера (например, после нажатия на какую-то ссылку), вызов не проходит через методы Navigate2. Итак, есть ли какое-то другое место, где я могу изменить все заголовки запроса, независимо от того, где он возник?
Если это невозможно с помощью CHtmlView, как я могу достичь желаемого эффекта (добавив несколько ключей/значений PAI в http-заголовок запроса)?

1 Ответов

Рейтинг:
6

Jochen Arndt

Почему вы перекрываете CHtmlView::Navigate2?

Согласно документации CHtmlView::OnBeforeNavigate2[^] должен использоваться для обработки навигационных событий и всегда будет вызываться.

Вы также должны описать то, что вы пробовали, а не копировать текст из других вопросов (Изменение HTTP заголовков CHtmlView[^]).

[ОБНОВЛЕНИЕ]
Возможная (непроверенная) реализация может выглядеть следующим образом:

void CMyHtmlView::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel)
{
    // Check if X-MyHeader not set already
    if (_tcsstr(lpszHeaders, _T("X-MyHeader:")))
    {
        // Create our own header
        CString strHeaders(lpszHeaders);
        strHeaders.TrimRight();
        strHeaders.AppendFormat(_T("\nX-MyHeader: test\n"));
         // Set flags
        nFlags = navNoHistory | navNoReadFromCache | navNoWriteToCache;
        // Call again with modified header
        Navigate2(lpszURL, nFlags, baPostedData, lpszTargetFrameName, strHeaders);
        // Cancel this request
        *pbCancel = TRUE;
    }
    else
    {
        CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);
    }
}


[/ОБНОВЛЕНИЕ]


l-O_O-l

На самом деле, я только что вышел из этой связи, я встречаю тот же самый вопрос, совершенно тот же самый. Я попробовал в функции OnBeforeNavigate2. Но я не знаю, как установить заголовок, потому что в соответствии с параметром этой функции. виртуальная пустота OnBeforeNavigate2(LPCTSTR lpszURL,DWORD nFlags,LPCTSTR lpszTargetFrameName,CByteArray& baPostedData,LPCTSTR lpszHeaders,BOOL* pbCancel); lpszHeaders передается по значению, я не могу изменить его после выполнения этой функции. Поэтому я задаю здесь вопрос.

Jochen Arndt

Вы не упомянули OnBeforeNavigate2 в своем вопросе и о том, что вы пробовали. Но я обновлю свой ответ.

l-O_O-l

Да, это правильный ответ. Я также получил ответ по этой ссылке: http://www.programmershare.com/2296226/. Большое спасибо!