Как перенаправить почтовые запросы, используя 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 для справочной информации и потенциальных решений