gpt4 book ai didi

c++ - 如何使用 TIdHTTPProxyServer 重定向 Post 请求

转载 作者:太空狗 更新时间:2023-10-29 21:26:37 26 4
gpt4 key购买 nike

目前我想使用 Indy10 TIdHTTPProxyServer 重定向特定的 Post 请求。我关注了页面

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");
}
}

如果我在浏览器的 URL 栏中按“http://sample.com/need_redirect_url”,它就会工作。但是,如果它是针对同一 URL 的 XMLHttpRequest,则不返回任何内容(无论是 Post 还是 Get)。

我不得不承认我真的不熟悉 HTTP 的工作原理。我也想知道是否有更好的方法来做我想做的事。

虽然我用的是C++Builder XE2。 Delphi 示例也很受欢迎,因为使用 C++ 的 indy 组件的示例较少

最佳答案

您的代码没有写一个空行来终止您发送的 HTTP header 。您还需要抛出异常以防止 TIdHTTPProxyServerOnBeforeCommand 事件处理程序退出后导航到客户端请求的 URL。

试试这个:

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();
}
}

关于c++ - 如何使用 TIdHTTPProxyServer 重定向 Post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com