2

サーバーから HTML ページを取得する単純な curl 呼び出しがありpreg_replace()、ページに何かを挿入し、その結果がブラウザーにエコー バックされます。

私が気づいたのは、curlがHTMLページを取得しようとしているHTTPサーバーがヘッダーを使用している場合'Transfer-Enoding: chunked、html出力は何らかの形でエンコードされ(いくつかの奇妙な兆候に気づきました)、preg_replace()呼び出しは仕事をしますが、ブラウザは取得ERR_INVALID_CHUNKED_ENCODINGして勝つだけですページをロードしません。チャンクされたエンコーディングを台無しにすることなく、ページの一部を置き換える方法が必要ですか?

4

1 に答える 1

1

チャンク転送エンコーディングは HTTP 1.1 の機能であり、データの送信を開始するときにサーバーがリソースのサイズを認識していないため、一連の「チャンク」をクライアントに送信します。チャンクの 16 進数のバイト)。

残念ながら、チャンクにデータを挿入する場合は、ブラウザに送信するときにチャンクのサイズも変更する必要があります。もちろん、完全なものを取得し、置換を行い、応答全体を 1 つのチャンクで (またはチャンクなしで) 送信することもできます。

適切な HTTP 1.1 クライアントはチャンクをデコードできる必要があり、適切な HTTP 1.1 サーバーは正当な一連のチャンクを送信する必要があります (やや一般的なサーバー側のエラーは、サイズがゼロの最後のチャンクを除外することです)。

仕様については、こちらを参照してください: https://www.rfc-editor.org/rfc/rfc7230#section-4.1

于 2014-11-07T13:51:08.333 に答える