横取りソフトでの応答情報の書き換えにつNo.00274
el-nino さん 01/05/27 18:40
 
ふたたび質問させていただきます。
今回は横取り丸の基本的な質問です。
長文ですみません。

横取りソフト開発キットのヘルプの"横取り丸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
です。

[ ]
RE:00274 横取りソフトでの応答情報の書きNo.00275
秀まるお2 さん 01/05/28 11:58
 
> #応答情報を書き換える場合でも、例えばヘッダ部分を少し書き換える程度
> #であれば、書き換えてからreturn FALSEしてかまいません。
> #(その後矛盾が起きないなら)
>
> となっていますよね?
> この最後の"矛盾が起きないなら"というのはどういうことが矛盾として考えら
> れるの
> でしょうか?

 矛盾が起きる例としては、Content-Length:ヘッダを書き換えたりすること
がありえます。Content-Length:ヘッダの中身を書き換えたりすると、後に続
くデータと矛盾することになります。今考えた所では他には矛盾の起きる例は
無いと思います。

> 私がやりたかったことを簡単に書きますと、
> サーバからの応答情報のあるヘッダを書き換えてブラウザに渡したかったので
> すが、

 ヘッダ部分の書き換えだけなら応答情報を完成させるまでもないと思います。
とりあえずそういう形で作ってみて様子を見て欲しいです。

[ ]