- PR -

responce.writeした値を取得したい

投稿者投稿内容
ぶじお
常連さん
会議室デビュー日: 2006/05/24
投稿数: 28
投稿日時: 2006-07-20 17:45
こんにちは、ふじおです。

aspxでResponse.Writeしている値を、aspで取得したいのですが
どなたか方法を知りませんか?

以下は、サンプルです。

○aspxのソース(text.aspx)
msg = "http://www.yahoo.co.jp" + "\r\n";
Response.Write(msg);
msg = "http://www.google.co.jp" + "\r\n";
Response.Write(msg);

○html
<body onload="http://www.xxxx.com/text.aspx">
この後に取得できた値を表示したい

以上、よろしくお願いします。

[環境]
Windows2003Server
Microsoft Visual C#.NET
Microsoft .NET Framework1.1
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-07-20 18:35
やりたいのはAjaxみたいな感じですか?

@IT:古くて新しいAjaxの真実を見極める
http://www.atmarkit.co.jp/fwcr/special/ajax01/03.html
ぶじお
常連さん
会議室デビュー日: 2006/05/24
投稿数: 28
投稿日時: 2006-07-24 09:30
引用:

burton999さんの書き込み (2006-07-20 18:35) より:
やりたいのはAjaxみたいな感じですか?

@IT:古くて新しいAjaxの真実を見極める
http://www.atmarkit.co.jp/fwcr/special/ajax01/03.html




burton999さん回答ありがとうございます。

Ajaxも試してみたのですが、他ドメインからは出来ないみたいですね。
以下のソース(html,javascript)をinetpub\wwwroot\testに置き、
http://localhost/test/test.htmlは実行できるのですが
外の端末からhttp://www.yyyy.com/test/test.htmlでは
httpoj.openで「書込みできません。」になってしまいました。

○html(http://www.yyyy.com/test/text.html)
<html>
<head>
<title></title>
<script type="text/javascript" src="test.js"></script>
</head>
<form>
<body onload="requestUrl('testID','POST','http://www.xxxx.com/text.aspx',true,on_loaded);">
<!-- ここへリンクを出力 -->
<div id="testID" style="margin-left:20px;line-height:1em"></div><br>
</body>
</form>
</html>

○javascript(http://www.yyyy.com/test/text.js)
function requestUrl( data , method , url , async ,callback )
{
//XMLHttpRequestオブジェクト生成
var httpoj = createHttpRequest()

//受信時に起動するイベント
httpoj.onreadystatechange = function()
{
//readyState値は4で受信完了
if (httpoj.readyState==4)
{
//コールバック
callback(httpoj, data, url)
}
}

try
{
//open メソッド
httpoj.open( method , url , async )
//send メソッド
httpoj.send( data )
}
catch(e)
{
if(typeof e == 'object')
{
alert(e.message);
}
else
{
alert(e);
}
}
}

○aspxのソースの一部(http://www.xxxx.com/text.aspx)
msg = "http://www.yahoo.co.jp" + "\r\n";
Response.Write(msg);

localでテストして出来たっと思って喜んでいたのでが
本番サーバに置いたら出来なかったので、ショックでした。
誰か御教授お願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-07-24 10:19
最終的には外部ドメイン(http://www.yahoo.co.jp)からレスポンスを取得して何がしたいのでしょうか?
スクリプトから外部ドメインにリクエストできないのはセキュリティ上の制限なので、外部ドメインからレスポンスを取得する処理をサーバーサイドでやってはいかがでしょう?
サーバーのaspxがプロキシのように動作するイメージです。
ぶじお
常連さん
会議室デビュー日: 2006/05/24
投稿数: 28
投稿日時: 2006-07-24 10:27
引用:

burton999さんの書き込み (2006-07-24 10:19) より:
最終的には外部ドメイン(http://www.yahoo.co.jp)からレスポンスを取得して何がしたいのでしょうか?
スクリプトから外部ドメインにリクエストできないのはセキュリティ上の制限なので、外部ドメインからレスポンスを取得する処理をサーバーサイドでやってはいかがでしょう?
サーバーのaspxがプロキシのように動作するイメージです。



burton999さん、早速の回答ありがとうございます。
「http://www.yahoo.co.jp」はサンプルです。安易なサンプルですみませんでした。
実際には、サーバでDBを検索して、値をResponse.Writeで返しています。

「サーバーのaspxがプロキシのように動作するイメージです。」
のイメージが解らないのですが。
もうちょっと詳しく教えて頂けると有難いのですが。難しいでしょうか?
勉強不足ですみません。


burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-07-24 10:36
Proxy.aspx
コード:
private void Page_Load(object sender, System.EventArgs e)
{
	HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.yahoo.co.jp/");
	System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("euc-jp");
	HttpWebResponse response = (HttpWebResponse)request.GetResponse();
	Stream stream = response.GetResponseStream();
	StreamReader reader = new StreamReader(stream, encoding);
	string html = reader.ReadToEnd();
	this.Response.Clear();
	this.Response.Write(html);
	this.Response.End();
}



こんなイメージです。
Proxy.aspxにクエリ文字列で、どこのレスポンスを取得して欲しいのか渡せばいいかと。
あと例外処理などは省いてます。aspxよりashxのほうがいいです。
ぶじお
常連さん
会議室デビュー日: 2006/05/24
投稿数: 28
投稿日時: 2006-07-24 13:23
引用:

burton999さんの書き込み (2006-07-24 10:36) より:
Proxy.aspx
コード:
private void Page_Load(object sender, System.EventArgs e)
{
	HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.yahoo.co.jp/");
	System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("euc-jp");
	HttpWebResponse response = (HttpWebResponse)request.GetResponse();
	Stream stream = response.GetResponseStream();
	StreamReader reader = new StreamReader(stream, encoding);
	string html = reader.ReadToEnd();
	this.Response.Clear();
	this.Response.Write(html);
	this.Response.End();
}



こんなイメージです。
Proxy.aspxにクエリ文字列で、どこのレスポンスを取得して欲しいのか渡せばいいかと。
あと例外処理などは省いてます。aspxよりashxのほうがいいです。




burton999さん
回答本当にありがとうございます。
サンプルを実行してみましたが、使い方が良く解りません。
何をしたいか整理させて頂くと

やりたい事は
aspxがResponse.Writeしている情報を、あるホームページのindex.htmlで取得したい。
Ajaxはセキュリティ上制限があるので、ダメ。
http://localhost/test/text.htmlでは動く
http://www.1111.com/test/text.htmlでは動かないのはセキュリティ上の制限だからと思っていいですか?

○aspxのソースの一部(http://www.xxxx.com/text.aspx)
Response.Write("東京");

○html(http://www.1111.com/test/text.html)
<html>
<head>
<title></title>
<script type="text/javascript" src="test.js"></script>
</head>
<form>
<body onload="requestUrl('testID','POST','http://www.xxxx.com/text.aspx',true,on_loaded);">
<div id="testID" style="margin-left:20px;line-height:1em"></div><br>
</body>
</form>
</html>
※testIDの「東京」と表示したい。

○javascript(http://www.1111.com/test/text.js)
function requestUrl( data , method , url , async ,callback )
{
//XMLHttpRequestオブジェクト生成
var httpoj = createHttpRequest()

//受信時に起動するイベント
httpoj.onreadystatechange = function()
{
//readyState値は4で受信完了
if (httpoj.readyState==4)
{
//コールバック
callback(httpoj, data, url)
}
}

try
{
//open メソッド
httpoj.open( method , url , async )
//send メソッド
httpoj.send( data )
}
catch(e)
{
if(typeof e == 'object')
{
alert(e.message);
}
else
{
alert(e);
}
}
}

本当に、無知ですみませんが、ご教授お願い致します。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-07-24 13:31
引用:

やりたい事は
aspxがResponse.Writeしている情報を、あるホームページのindex.htmlで取得したい。



これは既に実現できていますよね?
aspxがResponse.Writeしている情報ってのは、URLですよね?(サンプルではyahoo)
そのURLは取得できるが、JavaScriptからそのURLにリクエストを投げることはできない。(セキュリティ上の問題で)
本当の目的は、aspxがResponse.WriteしたURLからレスポンスを得ることではないのですか?
それは、クライアントサイドではできないので、サーバーサイドでやってはどうかと提案しているわけです。

ぶっちゃけ、何がしたいのか私には分りませんが。。。

スキルアップ/キャリアアップ(JOB@IT)