3

javascript を使用する Web サイトにログインする必要がある bash スクリプトを作成しようとしています。私は cURL を使用したことがないので、助けていただければ幸いです。Cookie を使用する必要があり、http ヘッダーがあることはわかっていますが、これらをどうする必要があるかわかりません。

ヘッダーは

Response Headers

Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Length  0
Content-Type    text/html;charset=UTF-8
Date    Thu, 17 May 2012 11:25:15 GMT
Expires Tue, 01 Jan 1980 00:00:00 GMT
Last-Modified   Thu, 17 May 2012 11:25:16 GMT
Pragma  no-cache
Server  Apache-Coyote/1.1
X-Powered-By    Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA  date=200807181417)/JBossWeb-2.0

Request Headers    
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection  keep-alive
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Cookie  SMLOGOUT=true; JSESSIONID=8D5757001A594D5CBB07C9250D1CB2B7; JSESSIONIDSSO=A0569CD1D6C981989F0FE691E9AFC314
Host    https:/example.com
Referer https://example.com
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
X-WCF-Fragment  true

ヘルプや正しい方向への指示をいただければ幸いです。ありがとう

4

3 に答える 3

3

リクエスト ヘッダーから、投稿データを送信していることは簡単にわかります。しかし、あなたはそれを提供しませんでした。http リクエストを curl コマンドに変換する方法の簡単な例を示します。

2 つのフォーム変数var1を投稿しvar2、POSTed を取得するこのリクエストがあるとしますhttp://www.example.com/form.url。リクエストは次のようになります。

POST /form.url HTTP/1.1
Host: www.example.com
Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

var1=val1&var2=val2

カールに変換すると、

curl -d 'var1=val1&var2=val2' \
--header 'Accept:  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
--header 'Accept-Encoding gzip, deflate' \
--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
'http://www.example.com/form.url'

ノート:

  1. このようにして、必要なだけヘッダーを追加できます。ただし、必要なヘッダーのみを追加することをお勧めします。curlほとんどのヘッダーが渡されるためです (例: 、HostUser-AgentなどContent-Type) Accept

  2. cookie.txtCookie を管理する場合は、現在のディレクトリに ファイルを追加し、-b cookie.txt -c cookie.txtコマンド スイッチを curl に切り替えます。意味、

    -b/--cookie <name=string/file> Cookie string or file to read cookies from (H)
    -c/--cookie-jar <file> Write cookies to this file after operation (H) 
    
  3. -dswitch は、リクエスト本文で渡されるデータ文字列を表します。

    -d/--data <data>   HTTP POST data (H)
    

これで、コマンドを作成できることを願っています。

于 2012-05-17T15:04:25.317 に答える
2

http では、データを URL に送信する方法が 2 つあります。

  • 役職
  • 得る

GETでは、データは URL の一部として送信されます。次のような URL が表示される場合があります。

http://foo.com/bar/barfoo/script.js?param1=this&param2=that&param3=the_other

この URL は の JavaScript にデータを送信していますhttp://foo.com/bar/barfoo/script.js。このスクリプトに次のパラメーターを送信しています。

  • param1=this
  • param2=that
  • param3=the_other

POST操作では、データは別の方法で送信され、URL 自体にエンコードされません。これは、Web フォームを使用しているときによく発生します (あなたがしようとしているものなど)。--formパラメータを使用しcurlて、HTTP フォームでの言葉と同じように POST データを渡すことができます。

CURL 管理から:

-F/--form <name=content>
    (HTTP) This lets curl emulate a filled-in form in which a user has
    pressed the submit  button.  This  causes  curl  to  POST  data using
    the Content-Type multipart/form-data according to RFC 2388. This
    enables uploading of binary files etc. To force the 'content' part to
    be  a  file, prefix the file name with an @ sign. To just get the
    content part from a file, prefix the file name with the symbol <. The
    difference between @ and <  is  then  that  @  makes  a  file  get
    attached  in  the  post as a file upload, while the < makes a text
    field and just get the contents for that text field from a file.


Example, to send your password file to the server, where 'password' is the
name of  the  form- field to which /etc/passwd will be the input:

    curl -F password=@/etc/passwd www.mypasswords.com

To  read content from stdin instead of a file, use - as the filename. This
goes for both @ and < constructs.

You can also tell curl what Content-Type to use by using 'type=', in a
manner similar to:

    curl -F "web=@index.html;type=text/html" url.com

  or

    curl -F "name=daniel;type=text/foo" url.com

You can also explicitly change the name field of a file upload part by
setting filename=, like this:

    curl -F "file=@localfile;filename=nameinpost" url.com

これが少し役立つことを願っています。

于 2012-05-17T15:29:35.950 に答える
1

申し訳ありませんが、curl は JavaScript を実行しません。

検討

  • javascript を手動で解読し、perl/ruby/python スクリプトで動作を複製する
  • セレンを採用
于 2012-05-17T11:04:05.967 に答える