0

私の理解を部分的に確認/修正するための一種の「初心者の質問」:自動化された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=...

しかし、私が何を試しても、どこにも行きませんでした:-| 今の質問:

  1. 上記の例のようにカールベースのPOSTを実行した場合、ログイン後に通常のWebブラウザーで表示されるのと同じように、応答として完全なHTMLページを取得しますか?

    • 私には本当のように見えますが、単純なPOSTで実行でき、「ログアウト」が含まれている必要があります...
    • しかし、私はこれを機能させることができないので、何が間違っている可能性がありますか?
  2. 複数のHTTPリクエストを実行する必要がある場合、そのようなcurlコマンドを使用するという概念はまったく機能しますか?カールが終了するとどうなりますか?ソケットが閉じ、Webサーバーがおそらくセッションを閉じます(そして私のjsessionidが無効です)?

    • このアプローチが機能しない場合は、libcurlベースの概念の方がうまくいく可能性がありますか?たとえば、phpcurl(それについて読んだだけですがまだ試したことはありません)では、セッションをphpスクリプト内に保持しているため、接続/セッションは開いたままになります...
    • おそらくサイトがCookieを使用しているかどうかに依存しますか?
  3. 元のアイデアを実現するためのより良いアイデアはありますか?理想的には、いくつかのスクリプトを使用して単純にする必要がありますが、巨大な監視スイートは使用しないでください

多くの「依存関係...」がある可能性が高いです:-| また、質問は100%正確ではないかもしれませんが、ヒントはありがたいです!! :-)

Rgds、tge

4

1 に答える 1

0

OK、ついに私はいくつかの進歩を遂げました-多分それは他の人を助けるでしょう...最初に、スクリプトベースのアプローチは、サーバー側にJoomlaを使用したテストケースの少なくとも1つで機能します(他の人は後で試します) )。ソリューションの鍵は次のとおりです 。JoomlaWebサイトへのスクリプトによるCURLログイン

説明した方法と同様に、最初のGETの応答からトークンを抽出し、それを2番目のフォームパラメーターに配置します。

rm -f /tmp/tge-cookies
HTTP_CODE=$(./curl -s -w "%{http_code}\\n" -o /tmp/tge-HTML-out.1 -b /tmp/tge-cookies -c /tmp/tge-cookies -L ${URL})
# Eval HTTP_CODE ...
Token=`awk '{ if(match($1, "<input") && match($3, "name=\"[a-z0-9]+\""))
  {
    gsub("name=\"", "", $3);
    gsub("\"", "", $3);
    if(length($3) == 33)
    {
      print $3;
      exit 0;
    }
  } }' /tmp/tge-HTML-out.1`
HTTP_CODE=$(./curl -L -s -w "%{http_code}\\n" -o /tmp/tge-HTML-out.2 -b /tmp/tge-cookies -c /tmp/tge-cookies -d "username=${User}&passwd=${Pass}&option=login&task=login&${Token}=1&remember=yes&Submit=Login" ${URL})
# Eval HTTP_CODE ...
# Eval /tmp/tge-HTML-out.2 whether containing "Logout" ...

2つ目の違いは、「-F」の使用は機能しませんが、「-d」の使用は機能することです。非常に興味深いのは、POSTパラメーターがHTTPfoxで表示されるものと異なることです。

よろしくtge

于 2012-04-09T20:21:34.810 に答える