デフォルトのエンコーディングのために、node.jsはhttpで作業しているときにバイナリデータを打ち負かします。

要するに、私はnode.jsでプロキシサーバーを書いています(それはまだ便利ですが、プロキシを持っているだけで、私は長い間火傷しました、これはまだ生きているのだろうか)

.pipe()のようなメソッドに基づくプロキシは私には向いていません-完全なデータを自分自身に渡す必要があるので、それらは通り抜けます。 データを完全にダウンロードし、処理してから送信する必要があります。

私は例に基づいてソケットにプロキシを作成しました-それは写真を打ちます(コンテンツの長さとは異なる長さのデータがダウンロードされ、さらに小さな写真の場合は差が小さく、大きな写真の場合はダウンロードされます)

私はhttpモジュールでそれを書き直しました-それはまだ打ち負かされています、問題の可視性は同じです。

長い間、***、そのような問題についてはどこにもありません...

理由は、ソケットとhttpを使用するすべての入出力にはエンコードがあり、それを指定しなくても(オプションのパラメーター)、 内部に何らかのデフォルトのエンコードがあり、デフォルトで何かを行うからです!

つまり、このエンコーディングを使用したすべての画像は何らかの形で処理され、損なわれます。 そして、これは別の質問です、一体何がエンコーディングなのでしょうか? 次に、2つ-エンコードの前後にあるはずです。

node.jsのエンコードに関する問題を解決する方法


エンコーディング「バイナリ」を配置します-ダウンロードする場合、データを受信する前に次のように記述する必要があります

var req = http.request(options, function (res) { res.setEncoding('binary'); 

そして、写真を送信するとき、次の形式の2番目のパラメーターを追加する必要があります

 response.write(data,'binary'); 

そして、それはデータへの上昇を止め、htmlエンコードもビートします。私はすぐに気づかなかったので、最初は写真で見ました。

また、あらゆる種類のstackoverflow.comやドキュメントからのアドバイスに基づいたものはありません。このエンコーディングの動作はデフォルトで有効になっており、すべてのデータを台無しにします。

それはどうですか? わかりました、エンコードは気にしませんが、写真はどうですか? 彼らは壊れたデータを受け取って送信するような穏やかなコード例を提供しています...

私はプロのプログラマーではなく、自転車を発明しています。 確かにあなたは(上記の条件を満たしている)たくさんのオープンソースプロキシを見つけるでしょう、あなたはただそれを調べなければなりませんでした...

Source: https://habr.com/ru/post/J326428/


All Articles