00274 01/05/27 18:40 横取りソフトでの応答情報の書き換えについて
投稿者 : el-nino   コメントを投稿する

ふたたび質問させていただきます。
今回は横取り丸の基本的な質問です。
長文ですみません。

横取りソフト開発キットのヘルプの"横取り丸API"内の
"応答情報系"、YdmGetRespContentPointerのドキュメントで

#応答情報を後で書き換えたい場合には、YDM_RESPONDED呼び出され時に
#return TRUEしつづける必要があります。そうでないと、未完成の応答情
#報であってもそのまま(未完成のまま)HTTPクライアントに送信されてし
#まい、後で書き換えてもHTTPクライアントに(書き換えた部分が)送信で
#きなくなります。

とあります。
これは YdmSetRespData で応答情報を書き換えて return FALSEすると、
それ以降サーバから送られてくる応答情報はブラウザに渡されなくなる、
という意味だと理解します。実際にサンプルプログラムを作ったらそのように動作しました。
例) ひとつのファイルのサーバからのレスポンスがaaaa bbbb ccccと三回にわかれて送られてくるとします。
ここでレスポンス aaaa を xx に書き換えるとします。
一回目のレスポンスを受け取った時点で
YdmSetRespData( hTrans, "xx", 2 );
とすると以降のbbb cccはブラウザには渡されません。

一方、同ヘルプの"YdmProc呼び出されパラメータ"内の"YDM_RESPONDED"ドキュメントで、

#応答情報を書き換える場合でも、例えばヘッダ部分を少し書き換える程度
#であれば、書き換えてからreturn FALSEしてかまいません。
#(その後矛盾が起きないなら)

となっていますよね?
この最後の"矛盾が起きないなら"というのはどういうことが矛盾として考えられるのでしょうか?
前述の文章だと書き換えてreturn FALSEした時点で横取り丸とブラウザのやり取りが終わってしまいますよね?

私がやりたかったことを簡単に書きますと、
サーバからの応答情報のあるヘッダを書き換えてブラウザに渡したかったのですが、
ドキュメントによると応答情報をすべて受け取ってから書き換えないといけないということでしょうか?
前述の例でいうと
aaaをxxxに書き換えたあともbbb cccをブラウザに渡す方法はあるのでしょうか?
"矛盾が起きないなら"というのがポイントのような気がしますが...。

それではよろしくお願いします。

環境
横取りソフト開発キット v1.0
横取り丸 v1.93
VC++ 6
です。


新規に投稿する