私の理解を部分的に確認/修正するための一種の「初心者の質問」:自動化されたWebサイトプロービングを実装したいと思います。ログオンしているので、実際にデータを取得したくありません。以前の仕事から、私はcurlを思い出し、URLの可用性(評価されたHTTP応答コード、たとえば200かどうか)をチェックするだけで、これはうまく機能します。現在、タスクもログオンしていますが、動作させることができず、意図したとおりに動作するかどうか疑問があります。しばらく実験してWWWを検索した後、明確な答えを見つけることができませんでした-だから私の希望はここにあります:-)
もともと私のアイデアは、スクリプトを使用して、Cookieオプションの場合に備えて、curlPOSTコマンドを内部に配置することでした。
$ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies -F "username=bla&passwd=blub&Submit=Login" http://some.url
(私はHTTPfoxを使用してPOSTパラメーターを決定しましたが、それらが正しいことはほぼ確実です)
次に、ファイル/tmp/tge-HTML.outを検索して、ログオンした証拠として「Logout」が含まれているかどうかを確認します(ログオンしていなくても、試したさまざまなURLを使用したすべてのテストで常にHTTP200を取得します)。
あるケース(Tomcatが背後にある)では、Firefoxにログオンした後、後続のURLに...&jsessionid = ...が含まれていることがわかります。もちろん、最初はわかりません。そこで、いくつか試してみました。たとえば、シェルスクリプトでcurl(コマンド!)を2回呼び出すには、最初のURLからsessionIDを取得し、次のように2番目のURLに追加します。
$ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies -F "username=bla&passwd=blub&Submit=Login" http://some.url
... extract jsessionid from /tmp/tge-HTML.out ...
$ curl -s -w "%{http_code}" -o /tmp/tge-HTML.out -b /tmp/tge-cookies -c /tmp/tge-cookies
http://some.url/...?jsessionid=...
しかし、私が何を試しても、どこにも行きませんでした:-| 今の質問:
上記の例のようにカールベースのPOSTを実行した場合、ログイン後に通常のWebブラウザーで表示されるのと同じように、応答として完全なHTMLページを取得しますか?
- 私には本当のように見えますが、単純なPOSTで実行でき、「ログアウト」が含まれている必要があります...
- しかし、私はこれを機能させることができないので、何が間違っている可能性がありますか?
複数のHTTPリクエストを実行する必要がある場合、そのようなcurlコマンドを使用するという概念はまったく機能しますか?カールが終了するとどうなりますか?ソケットが閉じ、Webサーバーがおそらくセッションを閉じます(そして私のjsessionidが無効です)?
- このアプローチが機能しない場合は、libcurlベースの概念の方がうまくいく可能性がありますか?たとえば、phpcurl(それについて読んだだけですがまだ試したことはありません)では、セッションをphpスクリプト内に保持しているため、接続/セッションは開いたままになります...
- おそらくサイトがCookieを使用しているかどうかに依存しますか?
元のアイデアを実現するためのより良いアイデアはありますか?理想的には、いくつかのスクリプトを使用して単純にする必要がありますが、巨大な監視スイートは使用しないでください
多くの「依存関係...」がある可能性が高いです:-| また、質問は100%正確ではないかもしれませんが、ヒントはありがたいです!! :-)
Rgds、tge