重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になります。

早速ですが、以下のスクリプトをWinXPHomeSP2+ActivePerl5.6.1の環境で実行しました。訳あって標準モジュールのみ使用しております。

#!/usr/local/bin/perl
use Socket;
use FileHandle;

# デフォルトホストの設定
$host = 'jws.jalan.net';
$port = getservbyname('http', 'tcp');
$path = '/APICommon/OnsenSearch/V1/?key=and10fed2591c0&l_area=430400&xml_ptn=1';
#$path = 'APICommon/OnsenSearch/V1/?key=and10fed2591c0&l_area=430400&onsen_q=4&xml_ptn=1';

$ip = inet_aton($host) || die "host($host) not found.\n";
$sockaddr = pack_sockaddr_in($port, $ip);
socket(SOCKET, PF_INET, SOCK_STREAM, 0);
connect(SOCKET, $sockaddr);
autoflush SOCKET (1);

print SOCKET "GET $path HTTP/1.1\nHost: $host\nConnection: close\n\n";

# HTTP応答を受信
while (<SOCKET>) {
print "$_";
}

# 終了処理
close(SOCKET);
exit;

長くて恐縮です m(__)m
このスクリプトを実行するとUTF8形式のXMLが出力されますが、なぜかその中の”弱アルカリ性低張性泉”という文字だけが文字化けしてしまいます。
ところがIE6やFireFox2などのブラウザで
http://jws.jalan.net/APICommon/OnsenSearch/V1/?k …
に直接アクセスすると、文字化けせずに表示されます。
従ってPerlの実装が悪いのかと思ったのですが、上記スクリプト8行目付近の#$pathのコメントをはずして実行すると(クエリストリングにonsen_q=4が追加され、出力内容が絞り込まれます)、文字化けが発生するレコードが出力されるにも関わらず文字化けしません。
というわけで、問題箇所が切り分けられず、途方にくれております。対処方法などご教授いただければ幸いです。

A 回答 (1件)

レスポンスを


Transfer-Encoding: chunked
――で返してくるみたいなので、これをちゃんと実装しないとダメかと。
それか、HTTP/1.0でやりとりするとか。
    • good
    • 0
この回答へのお礼

てっきり文字化けかと思っていました。
自分の知識不足でした。
Transfer-Encoding: chunkedに関して調べなおしてがんばって実装してみたいと思います。
ご回答ありがとうございました。

お礼日時:2007/01/07 15:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!