デフォルトのエンコーディングのために、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やドキュメントからのアドバイスに基づいたものはありません。このエンコーディングの動作はデフォルトで有効になっており、すべてのデータを台無しにします。



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



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



All Articles