3

現在、Indy10TIdHTTPProxyServerを使用して特定の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++BuilderXE2を使用していますが。C ++を使用したindyコンポーネントを使用した例が少ないため、Delphiサンプルも高く評価されています。

4

2 に答える 2

3

コードは、送信している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();
    } 
} 
于 2012-06-05T18:28:14.890 に答える
0

!= -背景情報と考えられる解決策については、http://en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requestsをXMLHttpRequest参照てください。example.commydomain.com

于 2012-06-05T12:24:26.857 に答える