処理終了後、他のプログラムへPOST方式でsubmitする方法はないでしょうか。
GET方式を使えば出来ますが、POST方式で値を渡したいのですが、可能でしょうか。
という質問があり、とても参考になりましたが、その後の処理がわかりません。

ユーザーが登録後、自分のサーバで処理終了し、
他のサーバーにある、パスワードとIDをPost方式で受け取るcgiへ引継ぎ、ログイン後の画面へ移行したいです。
そのプログラムは、GETでは、受け取れないようです。

LWPモジュールが使えないため、socketで、サーバ間の通信を考えていますが、どのようにして、ユーザーの接続を他のサーバ側に引き継いでよいのかわかりません。

お力をお貸しください。
よろしくお願いいたします。

A 回答 (2件)

はい。


"document.form.submit()"の効果は,フォームのSubmit(送信)ボタンを押すのと全く同じなんです。

実験的HTMLソースを作成しました。
これを見ていただけば,理解しやすいでしょうか?
このHTMLソースはページを開いたとき,Javascriptのボタンを押したとき,Submitのボタンを押したとき,3つのいずれかでフォームの送信動作(action)を実行します。

<FORM name=MYFORM action="javascript:alert('送信')">

<input type=submit>

<input type=button value="JavaScriptのボタン"
onClick="javacsript:document.MYFORM.submit()">

</FORM>

<SCRIPT language="JavaScript">
<!--
document.MYFORM.submit();
-->
</SCRIPT>
    • good
    • 0
この回答へのお礼

ページを開いたときそのまま送るのは、まさに必要としていた機能です。
おかげさまで出来そうです。ありがとうございました。

お礼日時:2001/12/13 11:51

1.元サーバ:


POSTさせたい内容のフォームを含むHTMLを元サーバで作成。
そのHTMLの最後に,JavaScriptの"document.form.submit()"含ませておく。
この作成したHTMLページをユーザへ返送。

2.クライアント側ブラウザ:
JavaScriptの実行により,次のサーバへのPOSTリクエストを発行。

上のような方法で,うまくいきませんか?


サーバ間通信をどうしても使いたいのなら,元サーバは一時的にReverseProxyとして動作させる必要がありますね。具体的には以下のような流れ。
元サーバ:次のサーバへPOSTリクエスト

次のサーバ:元サーバへその結果を返す。

元サーバ:次のサーバから受け取った結果をクライアント側ブラウザへ返す。

クライアントには,次のサーバの結果のみが返る。
    • good
    • 0
この回答へのお礼

早速のご指導ありがとうございます。

なにも、サーバー間通信しなくても、良いのですね。
相手側が、Refererで制限をかけてくれるようなら、JavaScriptを使いたいと思います。

サーバ間通信は、なるべくなら避けたかったので、とても参考になりました。

JavaScriptは、あまり詳しくないのですが、
document.form.submit()を使うと、cgiへフォームして、その結果を見て、別のところに、フォームをさらに投げられると言うことが出来るのでしょうか?

お礼日時:2001/12/10 02:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q処理終了後、他のプログラムへPOST方式でsubmitする方法

処理終了後、他のプログラムへPOST方式でsubmitする方法はないでしょうか。
GET方式を使えば出来ますが、POST方式で値を渡したいのですが、可能でしょうか。
(JavaScriptは使わず。)

Aベストアンサー

なるほど、片方がPHPでしたか。それではやむを得ないかもしれませんね。

一応お書きになったような内容で、当方の環境だと成功するのですが…。
write.cgiを呼び出すopenが失敗しているのかもしれません。失敗するとdieで
そのエラーメッセージを出力してますが、これはサーバのerror_logに出力
されるので、ブラウザからでは確認できませんね。失礼しました。
ではstart.cgiを以下のように修正してみてはどうでしょう。

#!/usr/local/bin/perl

$param = 'a=123&b=xyz';
$ENV{CONTENT_LENGTH} = length($param);
$ENV{REQUEST_METHOD} = 'POST';

print "Content-type: text/html\n\n";

open(OTHER_CGI, "|./write.cgi") or print "error: $!";
print OTHER_CGI $param;
close(OTHER_CGI);

print "success!";

要するに成功したらsuccess、失敗したらerror:でエラーメッセージを
出すようにしたわけです。Content-typeヘッダの後じゃないとちゃんと
出力されないのでその行も上に移動させてください。

ひょっとすると、CGIが実行されるときのカレントディレクトリが
違うのかもしれませんね。./write.cgiをフルパス、すなわち
例えば/my/home/directory/にあるのでしたら
「/my/home/directory/write.cgi」として指定してみてはどうでしょう?
(URLではこの場合ダメです)

なるほど、片方がPHPでしたか。それではやむを得ないかもしれませんね。

一応お書きになったような内容で、当方の環境だと成功するのですが…。
write.cgiを呼び出すopenが失敗しているのかもしれません。失敗するとdieで
そのエラーメッセージを出力してますが、これはサーバのerror_logに出力
されるので、ブラウザからでは確認できませんね。失礼しました。
ではstart.cgiを以下のように修正してみてはどうでしょう。

#!/usr/local/bin/perl

$param = 'a=123&b=xyz';
$ENV{CONTENT_LENGTH} = le...続きを読む

QLWPでPOSTする際。。。

LWP::AgentでPOSTメソッドを使う際
input typeがcheckbox(複数選択可)の場合うまくいきません。
その他のタイプだとうまくいくのですが。。。(textとかhiddenとか)

記述になにか違いがあるのでしょうか?

Aベストアンサー

どううまくいかないのでしょうか?
以下考えられる原因の予測です。

ブラウザ上でのチェックボックスの動作は、チェックが入っていると'name=value'の形式で送信しますが、チェックが入っていない場合はそもそもnameの部分も送信されません。

%formdata に form1=>''と空文字列を入力して送信したときは、
<input type="checkbox" name="form1" value="">
というチェックボックスが押されたと同様に振舞います。
チェックボックスを入れていない状態で送信したい場合は、そもそもform1のキーを含めてはいけません。

原因が違うようでしたら、具体的にどううまくいかないのかの補足をお願いします。

Qperlのlwp::simpleのgetのprintで文字化けが出る

下記のperlのソースで文字化けが出る。wide characterのエラーが出ます。
use LWP::Simple;
print get('https://opac.toshokan.city.fukuoka.lg.jp/licsxp-opac/WOpacUsrLendListAction.do');

ソースはcp932
urlはutf-8で書かれています。

utf-8フラグの関係だとは思いますが。
対処が分かりません。

エラーが出ない様なperlのソースをご提示願います。

Aベストアンサー

utf8文字列は、内部用の特殊なエンコーディングだと解釈するのがいいかもしれません。
UTF-8のバイト列としての文字列と、utf8フラグ付き文字列とでは、扱いが違います。
UTF-8のバイト列であっても、decode処理しなければutf8フラグ付き文字列にはなりません。

LWP::Simpleのgetは、外部のコーディングが何であろう(相手がshift_jisでも)と、内部用のutf8文字列で返す。
外部に出力するときは、内部用のをそのまま出力できないので、その出力先に合せてencodeで適切なコーディングに変換する。
ということです。

QLWP::Simpleでのgetについて

つい先日ローカルにサーバ環境をインストールし、
色々とプログラムを試しているのですが、
タイトルに記述したLWP::Simpleのgetを使用すると500エラーとなってしまいます

実行内容は下記のような単純なものです

use LWP::Simple;
$url = "http://localhost/test.cgi";#自動リンク防止に「:」を全角にしてます
$html = get($url);
print "Content-Type: text/html\n\n";
print $html;


・test.cgi単体では動作しています(単純に文字を出力するのみ)
・$url をローカルでなく外部URL(例 yahoo等)にしてもエラーとなりました
・getを行わなず $html = "a";のように任意文字列にした場合は出力されます
・perl/lib/LWP/ には Simple.pm が入っています
・use 行をevalで囲み $@ を見てみましたがエラーは入っていませんでした
・セキュリティソフトがブロックしている可能性も考え、切ってみましたが駄目でした
・レンタルサーバー上で実行した場合は成功しました($urlを外部URLにて)



こちらはApacheやOS側で他に何か設定等が必要なのでしょうか
それとも不足しているものがあるのか・・・手詰まり状態です

些細なことで結構ですので、助言いただけると助かります
以上、よろしくお願いします

-----------------------------------
Apache/2.2.4 Perl/v5.8.8 WinXP/HE
サーバ環境はXAMPP及びXAMPP Add-Onsで一括インストール

つい先日ローカルにサーバ環境をインストールし、
色々とプログラムを試しているのですが、
タイトルに記述したLWP::Simpleのgetを使用すると500エラーとなってしまいます

実行内容は下記のような単純なものです

use LWP::Simple;
$url = "http://localhost/test.cgi";#自動リンク防止に「:」を全角にしてます
$html = get($url);
print "Content-Type: text/html\n\n";
print $html;


・test.cgi単体では動作しています(単純に文字を出力するのみ)
・$url をローカルでなく外部URL(例 yahoo...続きを読む

Aベストアンサー

$Config{'osvers'}が 5になってるのが問題みたいみたいですが
調べてましたが意味がわかりません。

perl/lib/Error.pm
11行目~13行目
"$Config{'archname'}-$Config{'osvers'}" eq
"MSWin32-x86-multi-thread-4.0" or
die "Errno architecture (MSWin32-x86-multi-thread-4.0) does not match executable architecture ($Config{'archname'}-$Config{'osvers'})";
--
をコメントアウトしてみては?

Quse LWP::Simple get で、https:// は取得できない?

use LWP::Simple と get を使って、英訳ページなどを作るという記事を見ました。
私も似たような翻訳もどきを作って楽しんでいるのですが、
http:// は取得できても、https:// は取得できない
みたいなのです。
https:// は、いったいなんなのでしょうか?
これうまく取り込む方法はないでしょうか。

Aベストアンサー

httpsはSSLの技術を使用してブラウザとWebサーバが通信をする暗号化プロトコルです。
SSLについては
http://www.fc-lab.com/network/system/security/ssl.html
を参考に紹介いたします。
「ssl 公開鍵 仕組み」等で検索するとよいかもしれません。

次に、LWP::Simbple.pm をつかって https にアクセスする方法です。
openssl と Crypt::SSLeay.pm をインストールしてやれば、プログラムへの変更なしに自動的に http:// も https:// も LWP::Simple::get で取得できます。

参考URL:http://www.fc-lab.com/network/system/security/ssl.html


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報