Как перенаправить почтовые запросы, используя TIdHTTPProxyServer

В настоящее время я хочу перенаправить определенные запросы Post с помощью Indy10 TIdHTTPProxyServer. Я следил за страницей

http://embarcadero.newsgroups.archived.at/public.delphi.internet.winsock/200904/0904301714.html

и написал простой пример следующим образом.

oid __fastcall TForm3::MyProxyHTTPBeforeCommand(TIdHTTPProxyServerContext *AContext)
{

    if (AContext->Target == "http://example.com/need_redirect_url" ) {

        TIdIOHandler* io = AContext->Connection->IOHandler;

        io->WriteLn("HTTP/1.0 302 Moved Temporarily");
        io->WriteLn("Location:  http://exampledomain.com/target_url");
        io->WriteLn("Connection: close");    
    }
}

Это работает, если я нажимаю " http://sample.com/need_redirect_url" в адресную строку браузера. Но ничего не возвращайте (неважно Post или Get), если это XMLHttpRequest, нацеленный на тот же URL.

Я должен признать, что я действительно незнаком с тем, как работает HTTP. И мне также интересно, есть ли лучший способ сделать то, что я хочу.

Хотя я использую C++Builder XE2. Примеры Delphi также приветствуются, так как примеров использования независимых компонентов с использованием C++ меньше.

2 ответа

Решение

Ваш код не записывает пустую строку, которая завершает отправляемые вами заголовки HTTP. Вам также нужно будет сгенерировать исключение, чтобы предотвратить TIdHTTPProxyServer от перехода к запрошенному клиенту URL после OnBeforeCommand обработчик событий завершается.

Попробуй это:

void __fastcall TForm3::MyProxyHTTPBeforeCommand(TIdHTTPProxyServerContext *AContext) 
{ 
    if (AContext->Target == "http://xxx.com/need_redirect_url" )
    { 
        TIdIOHandler* io = AContext->Connection->IOHandler; 

        io->WriteLn("HTTP/1.0 302 Moved Temporarily"); 
        io->WriteLn("Location: http://mydomain.com/target_url"); 
        io->WriteLn("Connection: close");     
        io->WriteLn("");     

        Abort();
    } 
} 

Это выглядит как XMLHttpRequest проблема междоменной политики, потому что example.com знак равно mydomain.com - см. http://en.wikipedia.org/wiki/XMLHttpRequest для справочной информации и потенциальных решений

Другие вопросы по тегам