В настоящее время я хочу перенаправить определенные Post-запросы с использованием Indy10 TIdHTTPProxyServer. Я последовал за страницуКак перенаправить почтовые запросы с использованием 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 образцы также ценятся как есть меньше примеров использования Indy компонентов с использованием C++
Большое спасибо. В настоящее время я могу успешно получить ожидаемый ответ в прокси. Однако есть и другая проблема. Запрос на отправку становится Get request после перенаправления. Должен ли я делать какие-либо другие вещи, когда это запрос на отправку? – Willy
Изменение запроса 'POST' на запрос' GET' - это просто то, что делают некоторые HTTP-клиенты (ошибочно) при получении ответа «302». Такое поведение описано в [RFC 2616, раздел 10.3.3] (http://tools.ietf.org/html/rfc2616#section.10.3.3). Для запроса HTTP 1.1 используйте '303' вместо этого для сохранения' POST'. –
Спасибо, хотя после использования «HTTP/1.1 303 See Other» вместо этого он все еще не работает. Я не уверен, что это проблема с прокси-сервером или проблема с пользовательским агентом. По этому вопросу, я думаю, вы уже дали мне прекрасный ответ. (Тем не менее, я все еще хочу знать, почему 303 тоже не работает.) – Willy