4

そのため、次の場所で API 呼び出しを受け取ります。

POST http://olddomain.com/api/call
    Post contents in Raw Body

私はそれをにリダイレクトする必要があります

POST http:://newdomain.com/api/call

Raw Body の内容は同じです。POST サーバー側をリダイレクトする方法はないようです。それを行う唯一の方法は、HTML フォームを生成し、そのフォームを JS 経由で送信することです。したがって、JSON が返されることを期待する API クライアントが、POST をリダイレクトするためにその HTML/JS をレンダリングして送信することが可能かどうかはわかりません。

だから今、私は POST の生の本文コンテンツをクエリ文字列変数に変換する必要があるかもしれないと考えています - 呼び出しのデータ量はおそらく十分に少ないので、これを回避することができます - そしておそらく API 呼び出しハンドラを更新しますこのシナリオでは GET パラメータを受け入れます。

これはどれもまったくきれいに見えません。もっと良い方法があることを教えてください。

更新: curlAPI クライアントが使用するため、実装には互換性が必要です。

4

2 に答える 2

3

PHP から通常のページをリダイレクトするには、次のように実行します。

header("Location: http://newdomain.com/api/call");
exit;

しかし、ほとんどのクライアントが同じ POST データを自動的に渡すかどうかはわかりません (上記の Jay によると、これはPOST データを伝送しません)。とにかく、これはクライアントが HTTP リダイレクトをネイティブに処理することを前提としており、クライアントが他の誰かのマシンで実行されている場合、セキュリティ上の理由からこれに依存することはできません。たとえば、PHP の設定では、 HTTP リダイレクトに従うopen_basedirことはできません。curl

このため、クライアントがリダイレクトを行うことは期待できませ。あなたは仲介者になる必要があり、内部で newdomain.com に新しい呼び出しを行い、応答をクライアントに渡します。これはおそらく理想的な解決策ではありませんが、API をホストしている場合、クライアントが何を実行できるか、何を実行するかを慎重に検討する必要があります。

于 2012-08-09T17:21:57.990 に答える
2

あなたがこれを行うことができると私が知っている2つの方法があります。(a) .htaccess から HTTP ヘッダーをリダイレクトするか (PHP コードからのヘッダー リダイレクトは POST を転送しません)、単純な curl コードを使用して PHP コードの新しいページにレポートすることができます。

これらの方法は両方とも、次の記事で非常にうまくまとめられています: HTTP POST のリダイレクト

それが役立つことを願っています!

于 2012-08-09T17:21:56.517 に答える