3

Web サービスから部分的なコンテンツをフェッチするブラウザ クライアントがありますRange: bytes=100000-200000。リクエストは、PHP ページ fetch.php に入ります。その PHP ページで、要求された Range を使用して取得し、それを-$_SERVER['HTTP_RANGE']を使用して curl 要求に設定します。私が抱えている問題は、リモートサーバーがステータスとヘッダーで応答しているのに、私の PHP ページが aと noで応答するだけなので、結果はクライアントが完全であると考える部分的なファイルになることです。問題は、元のリクエストの結果を PHP に設定するにはどうすればよいですか?curl_setoptCURLOPT_RANGE206 Partial ContentContent-Range200 OKContent-RangeContent-Range

前もって範囲がわかっている場合は、コマンドを使用するだけheaderで完了できますが、応答で範囲が返されます。コンテンツを含むすべてのヘッダーを受信するようにcurlで設定し、ヘッダーを解析し、それを使用headerして設定し、応答を206に設定してから、すべてのデータをエコーアウトできます...しかし、データはバイナリであり、言うまでもなく非常に大きいため、これは、せいぜい次善のようです。

PHPでオプションを設定して、独自のヘッダーを送信せず、基本的に応答全体をリクエスタにエコーバックすることができるかどうか疑問に思っていました。これを十分に考えないと、キャッシング、接続、プロキシなど、他のヘッダーで問題が発生する可能性があります。

おそらく、curl からヘッダー (ある種の partial_execute?) だけを受け取り、必要なものを取得し、ヘッダーと応答コードを設定してから、基本的に exec と実際の応答 get の出力を直接完了する方法がありますか? カールからそれを実現する方法がわかりません。

PHP スクリプトが実際にリソースのターゲット サーバーを決定するため (これは静的ではありません)、実際のリバース プロキシを設定することも実際にはオプションではありません。

curl の使用をスキップして、直接 TCP/TLS 接続を行い、HTTP 要求/応答を管理できると思います。

追加のアイデアや可能性はありますか? ありがとう!

4

2 に答える 2

0

おそらく、カールからヘッダーだけを受け取る方法があります

これは HTTP プロトコルの一部です。参照: PHP で HTTP の HEAD コマンドを使用する最も簡単な方法は?

そうでなければ何が問題なのかわかりません。

部分的な応答が得られる場合は、接続タイムアウトが原因である可能性があります。これは、次を使用して変更できます。

CURLOPT_CONNECTTIMEOUT

于 2013-05-17T03:02:33.803 に答える