1

LWP::Simple を使用して、REST サービスへの GET 要求を作成しようとしています。簡単なコードは次のとおりです。

use LWP::Simple;
$uri = "http://api.stackoverflow.com/0.8/questions/tagged/php";
$jsonresponse= get $uri;
print $jsonresponse;

私のローカル マシンでは、Ubuntu 10.4 と Perl バージョン 5.10.1 を実行しています。

farhan@farhan-lnx:~$ perl --version
これは、x86_64-linux-gnu-thread-multi 用にビルドされた v5.10.1 (*) perl です。

正しい応答を取得して、画面に出力できます。例えば:

farhan@farhan-lnx:~$ head -10 output.txt
{
"合計": 1000,
"ページ": 1, "ページサイズ
": 30,
"質問": [
{
"タグ": [
"php",
"配列"、
"コーディングスタイル"
(...省略...)

しかし、SSH 接続先のホストのマシンでは、まったく同じコードのガベージが画面に出力されます。エンコーディングと関係があると思いますが、REST サービスは応答で文字セット タイプを返さないので、LWP::Simple に正しいエンコーディングを強制的に使用させるにはどうすればよいでしょうか? ここで何が起こっているのでしょうか?

ホストのマシン上の Perl のバージョンは次のとおりです。

[drdd]$ perl --version
これは、x86_64-linux-gnu-thread-multi 用にビルドされた v5.8.8 の perl です。

4

2 に答える 2

4

私はたまたま、Perl5.8.8を搭載した64ビットのRHEL5.4ボックスを持っています。私はあなたのコードを取り、まったく同じ結果を得ました。Data :: Dumperを使用してデータをダンプしようとしましたが、何も変わりませんでした。次に、コマンドラインに移動してこれを実行しました。

 wget -O jsonfile http://api.stackoverflow.com/0.8/questions/tagged/php
 --2010-05-26 11:42:41--  http://api.stackoverflow.com/0.8/questions/tagged/php
 Resolving api.stackoverflow.com... 69.59.196.211
 Connecting to api.stackoverflow.com|69.59.196.211|:80... connected.
 HTTP request sent, awaiting response... 200 OK
 Length: 5430 (5.3K) [application/json]
 Saving to: `jsonfile'
 2010-05-26 11:42:42 (56.9 KB/s) - `jsonfile' saved [5430/5430]

私がこれをしたとき:

 file jsonfile

私が得た:

jsonfile: gzip compressed data, from FAT filesystem (MS-DOS, OS/2, NT), max speed

そのため、JSONデータはWebサーバーによってgzip圧縮されました。私はこれを試しました:

gzip -dc jsonfile

そして、見よ、結果はあなたが期待するようにJSONデータです。

ここでできることは、別のモジュールを使用してデータを解凍するか、LWP :: UserAgentを使用してgzipを受け入れ、その方法でリクエストを処理する方法を示すこの別のスレッドを確認することです。

于 2010-05-26T15:50:14.780 に答える
3

これはバグ44435です。libwww-perlをバージョン5.827以降にアップグレードします。

于 2010-05-26T15:50:06.437 に答える