人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

海外の株価チャートを運営するサイトに表示させるには、どうしたら良いでしょうか?直リンクだと表示できます。http://bit.ly/mRW4rz しかし、こちらhttp://www.w-stock.biz/ のサイトに表示させようとすると出来ません。以前はこのPHPプログラムを使い読み込ませていました。http://bit.ly/oLYZy5 しかし表示されなくなってしまったので、どうしたら良いか頭を悩ませています。


●質問者: idetuyo
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●300ポイント

PHP のプログラムでは、グラフのイメージが正しく取れてたのに、<img> で同じリクエストを出すようにしたら、イメージが取得できなくなった、ということですよね?


<img> を使うと、Referer: が、それを抱えているページのものになるのですが、それがはじかれて 403 になっているようです。


以下、telnet で試した結果です。

<img> を使ったときのヘッダを模したもの。

GET /esignalprod//esigchartspon?cont=NKD+Z1&period=V&varminutes=5&size=560x384&bartype=CANDLE&bardensity=HIGH&showextendednames=true HTTP/1.1

Host: quotes.esignal.com

Referer: http://www.w-stock.biz/

その応答。

HTTP/1.1 403 Invalid Referrer

Server: Resin/3.0.23

Content-Type: text/html

Transfer-Encoding: chunked

Date: Tue, 04 Oct 2011 14:36:45 GMT

ステータス 403 が返される。Referer: が問題らしいことが、ステータスの後の文字列で分かる。


Referer: を quotes.esignal.com にしたもの (PHP のプログラムでやってたこと)。

GET /esignalprod//esigchartspon?cont=NKD+Z1&period=V&varminutes=5&size=560x384&bartype=CANDLE&bardensity=HIGH&showextendednames=true HTTP/1.1

Host: quotes.esignal.com

Referer: http://quotes.esignal.com/

その応答。

HTTP/1.1 200 OK

Server: Resin/3.0.23

Content-Type: image/png

Transfer-Encoding: chunked

Date: Tue, 04 Oct 2011 14:29:41 GMT

正しくイメージを取得できる。


直リンク相当のヘッダ (Referer: が無い) の場合。

GET /esignalprod//esigchartspon?cont=NKD+Z1&period=V&varminutes=5&size=560x384&bartype=CANDLE&bardensity=HIGH&showextendednames=true HTTP/1.1

Host: quotes.esignal.com

その応答。

HTTP/1.1 200 OK

Server: Resin/3.0.23

Content-Type: image/png

Transfer-Encoding: chunked

Date: Tue, 04 Oct 2011 14:39:28 GMT

これでも、正しくイメージを取得できる。


<img> を使う限りは、ヘッダを自由にできないので、PHP のプログラムを介してイメージを取得するしかないと思います。

◎質問者からの返答

a-kuma3さま

ありがとうございます。

質問者のidetuyoと申します。

詳細のご回答誠にありがとうございます。

以前、以下のようなPHPプログラムを解して

イメージを取得していたのですが・・・

仕様が変ったのか、イメージ取得できなくなってしまいました。

プログラムは以下の通りです。

こちらのPHPプログラムでなく

別のプログラムでイメージ取得は出来ないでしょうか?

恐れ入りますが、アドバイス頂けたら幸いです。

$type = ‘Content-type: image/png’; //画像データのMIME-type

$host = ‘charts.marketcenter.com’; //目的のホスト

$path = ‘/cis/cbotcis?cont=NKD%20Z1&period=V&bartype=CANDLE&bardensity=MEDIUM&showextendednames=true&headerbackground=255,255,255&headerforeground=0,0,0&headerdatacolor=0,0,0&size=650X314&varminutes=5

‘; //目的のパス

$fp = fsockopen($host, 80, $errno, $errstr, 30);

if (! $fp) {

echo “$errstr ($errno)
\n”;

} else {

$out = “GET $path HTTP/1.1\r\n”;

$out .= “Host: $host\r\n”;

$out .= “User-Agent: Mozilla/5.0\r\n”;

$out .= “Connection: Close\r\n\r\n”;

fwrite($fp, $out);

//HTTPヘッダを読み飛ばす

while (! feof($fp)) {

$headers = fgets($fp, 8192);

if (trim($headers) == ”) {

break;

}

}

//画像を読み込む(chunked形式)

$img = ”;

while (! feof($fp)) {

$ss = fgets($fp);

$cnt = intval($ss, 16);

while ($cnt > 0) {

$bb = fread($fp, $cnt);

$cnt -= strlen($bb);

$img .= $bb;

}

fread($fp, 2); //\r\nをスキップ

}

fclose($fp);

header($type) ;

echo $img;

}

?>

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ