喫茶XRAYトップページ

[▲前のスレッド]

[11227] PostメソッドでPostURLにデータを送る について返信 削除
2017/7/3 (月) 00:55:02 sato
いつもお世話になります。
これまで、患者IDをサーバーにGETメソッドで送り、検査結果を以下の
様にデフォルトにブラウザー上に表示するという運用を行っていました。
  url:='http://kensasvrkekka/pgm-cmdline.php?karute='+PID;
  ShellExecute(Handle,'open',PChar(url),'','',SW_SHOWDEFAULT);
ところが、今後アクセスはGETでなくセキュリティ上POSTで送信する
ように変更するとべンダーから通知がありました。

775_Indy_HTTPSendData を参考にしてPostメソッドでデータを
引数で渡すところまでは出来、
    //サーバからのデータを表示
    Memo1.Lines.Add(ResStream.DataString);
で受け取ることは出来ました。
ただ、検査結果の表示にはJavaAppletを使用するため、結果を
デフォルトのブラウザー上に表示したいのですが、ヒントだけでも
頂けないでしょうか。


[11228] Re:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/3 (月) 17:27:16 SO
▼ satoさん

レスポンスされたHTMLデータを保存して、
ブラウザを開いて閲覧することが出来るでしょうか?

CSRF等のセキュリティ対策がされていた場合、
閲覧できないと思いますが、どうでしょうか?

閲覧できない場合、ブラウザを操作してやるべきかと...?

[11229] Re2:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/4 (火) 14:10:04 sato
▼ SOさん
ありがとうございます。

> レスポンスされたHTMLデータを保存して、
> ブラウザを開いて閲覧することが出来るでしょうか?

一旦、保存したファイルをブラウザで開くと、最初の画面の
表示は正確にできますが、どうやらカレントディレクトリがローカルに移るのが
いけないらしく(この辺りは、知識がないのでよく分からないのですが)
リンク先などが見つけられなくて、その先の操作ができません。

>CSRF等のセキュリティ対策がされていた場合、
閉じたネットワークなのでその点は大丈夫のようです。
 
> 閲覧できない場合、ブラウザを操作してやるべきかと...?
ブラウザから直接POSTメソッドでパラメータを送信する方法が分かりません。
GETだと簡単だったのですが.....
なにしろ、乏しい知識なのでご迷惑をおかけします。

[11230] Re3:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/4 (火) 14:37:55 SO
▼ satoさん

> >CSRF等のセキュリティ対策がされていた場合、
> 閉じたネットワークなのでその点は大丈夫のようです。


認証とかしなくてOKのようですね。


> > 閲覧できない場合、ブラウザを操作してやるべきかと...?
> ブラウザから直接POSTメソッドでパラメータを送信する方法が分かりません。
> GETだと簡単だったのですが.....
> なにしろ、乏しい知識なのでご迷惑をおかけします。


マスターの記事に有用なものがあります。
http://mrxray.on.coocan.jp/Delphi/plSamples/940_TWebBrowserAndIE.htm
http://mrxray.on.coocan.jp/Delphi/plSamples/941_IEObject_InputClick.htm

DocumentにFormタグ作って、submitすればいけそうですね。

[11233] Re4:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/6 (木) 17:03:08 sato
▼ SOさん
ありがとうございました。
WEbBrowserの引数PostDataにセットすることで、パラメータを送ることができ、
うまく表示できるようになったのですが、一難去ってまた一難。
FormのWEbBrowse上に表示されている画面の印刷ボタン押下で
<INPUT TYPE="BUTTON" .....印刷.....OnClick="return ResultPrintForm()">
というソースのところで、
HTTPステータス500-java.lang.NullPointerExceptionという、javaのエラーがでます。
同じurlに対してブラウザで表示したときの印刷ボタンでは正常に印刷されます。
もうすこし、考えてみます。非力が身に沁みます。




[11234] Re5:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/6 (木) 18:36:02 Mr.XRAY
こんにちは.

スレッド全く読んでいなのてすが (^^;
苦労されているようですね.
時間がとれたら私も調べてみます.


[11235] Re5:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/7 (金) 07:55:35 SO
▼ satoさん
> ▼ SOさん
> ありがとうございました。
> WEbBrowserの引数PostDataにセットすることで、パラメータを送ることができ、
> うまく表示できるようになったのですが、一難去ってまた一難。
> FormのWEbBrowse上に表示されている画面の印刷ボタン押下で
> <INPUT TYPE="BUTTON" .....印刷.....OnClick="return ResultPrintForm()">


マウスクリックでエラーとなるのですか?


ResultPrintForm()は、マスターの記事にてリンクしている方法で解決できませんか?

http://www.delphidabbler.com/articles?article=21

[11236] Re6:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/7 (金) 18:02:15 sato
▼ SOさん
お世話になります。まだ解決していませんが、
「:PostメソッドでPostURLにデータを送る について」とは少し事情が
変わってきたので中間報告です。
現状の問題点は、WEbBrowserの引数PostDataにパラメータをセットして、
WEbBrowser.Navigate(.......)と送信し、結果をWEbBrowseに表示
した場合には、jspで動く「印刷」ボタンを押した時にjavaのエラーが
出るのですが、同じurlをIEで表示した場合は正常に動作します。
WEbBrowser上のHTMLの動作とIE上での動作が違う原因が分かりません。
というものです、もう少し調べてみます。

[11237] Re7:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/7 (金) 18:19:15 SO
▼ satoさん

>[11233] FormのWEbBrowse上に表示されている画面の印刷ボタン押下で

と書かれていたので、TWebBrowserに変更したかと思ってました。

IE限定でいくなら、IEオブジェクトに HTML(FORMタグ)をセットしてPOSTすればよいかと思います。

http://mrxray.on.coocan.jp/Delphi/plSamples/941_IEObject_InputClick.htm

[11258] Re8:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/11 (火) 16:55:59 sato
▼ SOさん
お世話になります。
書き方がまずかったようですのでもう一度整理しました。
1.これまで、urlにGetメソッドで引数を渡し、IEで結果を表示していました。
  ShellExecute(Handle,'open',PChar(url),'','',SW_SHOWDEFAULT);
2.サーバーの仕様が変わり、Postメソッドで引数を渡すように変更されたが、
 Postメソッドで引数を渡しながらIEを起動する方法が分からなかったので
3.WEbBrowserの引数PostDataにパラメータをセットして、
 WEbBrowser.Navigate(....)で開くとIEで表示したのとまったく同じに表示された。
4.ところが、WEbBrowser上に表示されている、jspで動く「印刷」ボタンを押した
 時にjavaのエラーが出る。(これは、WEbBrowserに変えてOleContainerを
 使っても同じくエラーになる)IEオブジェクトによって動作が異なるのでしょうか
5.疑問は、jspで動くボタンの挙動が、IEそのものの画面とWEbBrowser上とでは
 どうして違うのかという事です。
6.最終的には、ボタンの動作が正常にできるなら、WEbBrowserで表示させたいの
 ですが、エラーを防げないなら、IEでもいいのですが、
 Getメソッドで引数を渡しながら、IEを起動させる方法がいまだに分かりません。

[11259] Re9:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/11 (火) 19:04:02 taka
▼ satoさん
>ShellExecute(Handle,'open',PChar(url),'','',SW_SHOWDEFAULT);
は、ユーザーがデフォルトとして設定したブラウザへ送るコマンドになりますので
IEに送りたいというなら
ShellExecute(Handle,'open','iexplore',PChar(url),'',SW_SHOWDEFAULT);
とするほうが正しい処理です。

スクリプトエラー
(1) スクリプトが原因で不具合コードがある場合がほとんどなので
    IEで問題のURLを開いて、F12キーを押しデバッグする
(2) WebBrowserコントロールのローカルセキュリティの問題としてあきらめる

>エラーを防げないなら、IEでもいいのですが、
>Getメソッドで引数を渡しながら、IEを起動させる方法がいまだに分かりません。

ヒント
09_IE の新規起動 - CreateOleObject を OleVariantで扱う


[11260] Re9:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/11 (火) 19:39:22 Mr.XRAY
▼ satoさん.こんにちは.思いついたところだけですが,

> 4.ところが、WEbBrowser上に表示されている、jspで動く「印刷」ボタンを押した
>  時にjavaのエラーが出る。(これは、WEbBrowserに変えてOleContainerを
>  使っても同じくエラーになる)IEオブジェクトによって動作が異なるのでしょうか


これなんですが,そのようになる可能性はあるかも知れません.
マイクロソフトでは,TWebBrowser コンポーネントのレンダリングモードを
IE 7 互換にしていますが,これは互換性のためと言っています.
このレンダリングと関係あるかも知れません.

[06_IE コンポーネントのレンダリングの互換モードを確認]
http://mrxray.on.coocan.jp/Delphi/plSamples/944_plGooleSearch.htm#06

(注: レンダリングモードを IE 11 互換にしても IE 11 と同じになるわけではありません)

JavaScript のエラーはおそらく TWebBrowser では発生すると思います.
デフォルトのままではです.
コーディングが必要と思われますが,TEmbeddedWB コンポーネントを使用すると
オプションの設定である程度制御が可能なようです.

もう少し調べてみないと詳しくは分かりません.
以前ブラウザについて結構ネットで調べたことがあるつもりなんですが (^^;


[11268] Re10:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 08:28:59 SO
> JavaScript のエラーはおそらく TWebBrowser では発生すると思います.
> デフォルトのままではです.
> コーディングが必要と思われますが,TEmbeddedWB コンポーネントを使用すると
> オプションの設定である程度制御が可能なようです.


Chromeという手もありますね!
http://mrxray.on.coocan.jp/Delphi/plSamples/932_GoogleChromeControl.htm
http://mrxray.on.coocan.jp/Delphi/plSamples/934_GoogleChrome_CEF4Delphi.htm

[11263] Re9:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/11 (火) 19:57:50 SO
▼ satoさん

お二方が既にレスしていますので、ココだけ。

スクリプトエラーというのは、ResultPrintForm()のエラーでしょうか?
であるなら、Javascriptになっているはずなので、
コードをココに貼り付けることはできますか?
場合によっては、Javascriptでやっていることを自前でやることで解決するかも?

エラー箇所が分からない場合、
takaさんの「IEで問題のURLを開いて、F12キーを押しデバッグする」にて確認してください。

[11264] Re9:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 00:17:56 taka
▼ satoさん
>JavaAppletを使用するため
javaが絡んでいるのですね
あー・・・。 javascriptと勘違いしていました。

JavaApplet TWebBrowser で検索するとたくさんでてきますよ
素のTWebBrowserでは無理でしょうね
TEmbeddedWB コンポーネントに差し替えてもできるか?うーん・・・。
頑張ってください (^ ^)/



[11265] Re10:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 08:01:37 SO
▼ takaさん
> ▼ satoさん
> >JavaAppletを使用するため
> javaが絡んでいるのですね
> あー・・・。 javascriptと勘違いしていました。


...同上 m(_ _)m

>INPUT TYPE="BUTTON" .....印刷.....OnClick="return ResultPrintForm()">というソースのところで、
>HTTPステータス500-java.lang.NullPointerExceptionという、javaのエラーがでます。


これのことでしょうけど...
サーバーサイドがjspで実装されているだけで、
クライアント側が必要なデータをPOSTないしGETしてあげればjspでもphpでも動くと思います。

ResultPrintForm()の関数をエミュレートというか、
自前で同じような動作をさせることで解決することが可能の場合があるので、
ResultPrintForm()の中身を書いてもらえれば、なんとかなるかも...

# というか、インスタンスが生成されていないオブジェクトにアクセスしようとしてますけど、
# イレギュラーな動きなのかなぁ?

[11267] Re11:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 08:07:03 SO
▼ SOさん
> ▼ takaさん
> > ▼ satoさん
> > >JavaAppletを使用するため


...あれ?
Javaアプレット?
JSP?
どちら?

>INPUT TYPE="BUTTON" .....印刷.....OnClick="return ResultPrintForm()">というソースのところで、
>HTTPステータス500-java.lang.NullPointerExceptionという、javaのエラーがでます。


って書いてるので、アプレットでは無いと思ってますけど...(^^;A

[11269] Re12:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 09:33:29 SO
全く関係ないんですけど、
大昔にJBuilderなるものがありましたねー。
https://ja.wikipedia.org/wiki/JBuilder

[11270] Re13:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 16:36:26 sato
▼ SOさん、takaさん、マスター
みなさん本当にありがとうございました。半分あきらめかけていたのですが
F12でResultPrintForm()の中身を見ることができました。
function ResultPrintForm(){
   url="jsp/ResultReport.jsp";
   newwin=window.open(url,'new','fullscreen=yes,scrollbars=1');
   newwin.moveTo(0,0)
}
となっていたので、WebBrowser上では新しいウィンドウが開けないのかと思い
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  WebBrowser2.RegisterAsBrowser:=True;
  ppDisp:=WebBrowser2.Application;
  Cansel:=False;
end;
と、ダミーのWebBrowser2を使うことでエラーが出なくなって喜んだのもつかの間
一度印刷ボタンを押したあとに、二度目の押下でエラーになりガックリ。
いろいろと探し回り
papyさんの掲示板で
http://www.papy.in/bbs/delphi/200809/08090044.html
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
  OpenNewWindow := True;
  if not Assigned(TempWB) then begin
   TempWB := TWebBrowser.Create(Self);
// TempWB.Visible := False;  TempWB.Width := 0;  TempWB.Height := 0;
   TempWB.OnBeforeNavigate2 := WebBrowser1BeforeNavigate2;
  end;
  ppDisp := TempWB.ControlInterface.Application;
end;
を見つけ、さっそく試したところバッチリでした。
あわてていたので環境を書くのを忘れていました。Win7,Delphi7,IE8 です。
みなさん、春子さん本当にありがとうございました。
SOさん最初から最後までお世話になりました。
マスター、これで連休中安心して白山に行ってこれます。



[11271] Re14:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 16:47:14 SO
▼ satoさん

お〜、バッチリだそうで、良かったです。


[11273] Re14:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 19:55:42 Mr.XRAY
▼ satoさん

問題が解決してよかったと思いますが,

> マスター、これで連休中安心して白山に行ってこれます。

あっー,私白山行ったことないんですよね.
くやしい〜,行きたい山の一つなんです.
楽しんできてください.


[11274] Re15:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 19:59:23 Mr.XRAY
> 楽しんできてください.

これですね.うちの山の仲間が使う言葉なんです.
普通,山に行くと言うと「気を付けて」
なんですが,我々は「楽しんでこいや」なんです.


[11275] Re16:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/13 (木) 01:02:27 sato
▼ Mr.XRAYさん
> 楽しんでこいや
(思わず)すみません。お先です。
海の日に登る偏屈物ですが、梅雨明けで(まだかな)雪もまだ多くて、
それほどの人出ではなく、高山植物勢揃い。だといいのですが。
本当は人出をさけて、のんびり、別山市ノ瀬道から釈迦新道を行くつもり
でしたが、釈迦新道は崖崩れで通行止めだそうです。
20年ほど前、別山市ノ瀬道から中宮温泉に行ったことがあります。
他に見られないほど、避難小屋が充実、水も豊富なので気に入っています。
しかし、年々体力の衰えには勝てず、テントが重くなってきました。
でも、40年くらい前、槍ヶ岳の肩の小屋で1畳に3人くらいの事があって、
その後はずっとテントです。
帰ったら、また純喫茶XRAYで、谷川の清流で淹れたおいしいコーヒーを
いただきに参ります。

[11266] Re10:PostメソッドでPostURLにデータを送る について返信 削除
2017/7/12 (水) 08:03:10 Mr.XRAY
> javaが絡んでいるのですね
> あー・・・。 javascriptと勘違いしていました。


ありっ,私も.

> 素のTWebBrowserでは無理でしょうね

多分,そう思います.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82