anisha@linux-dopx:~> wget -c --no-check-certificate --user abc --password xyz https://www.smart-developer.com/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf
--2011-08-29 15:11:53-- https://www.smart-developer.com/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf
Resolving www.smart-developer.com... 80.237.227.161
Connecting to www.smart-developer.com|80.237.227.161|:443... connected.
WARNING: cannot verify www.smart-developer.com's certificate, issued by `/C=US/O=Thawte, Inc./OU=Domain Validated SSL/CN=Thawte DV SSL CA':
Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: `SD_02.pdf'
[ <=> ] 19,286 10.4K/s in 1.8s
2011-08-29 15:12:00 (10.4 KB/s) - `SD_02.pdf' saved [19286]
ダウンロードした本はKB(実際のサイズは20 MB)単位で、開いたときにエラーが表示されますが、Firefoxから直接ダウンロードするのに問題はありません。
編集1: シェルがユーザー名に@を許可できないようです!
また、引用符の位置を見てください。
右にスクロールします。
anisha@linux-dopx:~> wget -c https://[email protected]:[email protected]/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf
https://[email protected]:[email protected]/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf: Bad port number.
anisha@linux-dopx:~> wget -c https://'[email protected]':[email protected]/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf
https://[email protected]:[email protected]/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf: Bad port number.
anisha@linux-dopx:~> wget -c https://'[email protected]:abc'@www.smart-developer.com/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf
https://[email protected]:[email protected]/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf: Bad port number.
anisha@linux-dopx:~> wget -c https://x.y.z:[email protected]/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf
--2011-08-29 16:01:38-- https://x.y.z:*password*@www.smart-developer.com/lnmshop/download/SmartDeveloperUS/203/SD_02.pdf
Resolving www.smart-developer.com... 80.237.227.161
Connecting to www.smart-developer.com|80.237.227.161|:443... connected.
ERROR: cannot verify www.smart-developer.com's certificate, issued by `/C=US/O=Thawte, Inc./OU=Domain Validated SSL/CN=Thawte DV SSL CA':
Unable to locally verify the issuer's authority.
To connect to www.smart-developer.com insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.
anisha@linux-dopx:~/Desktop>
答え1
認証タイプ
HTTPはデフォルトでユーザーが使用する認証をサポートします。ただし、基本的なHTTP認証はほとんど使用されません。また、HTTPを使用すると、フォームデータをサーバーに送信できます。ほとんどのWebサイト(使用したいWebサイトを含む)はユーザーフレンドリーでカスタマイズ可能なため、HTTP認証ではなくこのフォームベース認証を使用します。
フォーム認証の仕組み
HTTP クライアントが HTTP サーバーからリソースを要求すると、大量のデータが HTTP ヘッダーに送信されます。フォームベース認証の重要な部分はクッキーです。 Cookieは、キー=値ペアセットの名前にすぎません。 HTTPリクエストで複数のCookieを送信できます。
制限されたリソースに対する要求が来ると、サーバーはセッション Cookie で特定の認証トークンを探します。存在しない場合、クライアントはまだログインしていないことを意味するため、要求されたリソースの代わりにログインフォームが返されます。トークンが存在し、有効な場合、クライアントはログインし、サーバーは要求されたリソースを返します。
それでは、この特別な認証トークンをどのように取得してどのように送信できますか?有効なデータを含むログインフォームを送信すると、情報を入手できます。サーバーがクライアントを認証すると、HTTPヘッダーにCookieを再送信します。このクッキーを保存し、今後のすべてのリクエストに転送する必要があります。
真鍮釘
メッセージ収集
ログインページのソースコードを確認してください。 wgetを使ってダウンロードしました。テキストエディタで開きます。<form...>
ソースコードで見つけてください。一般的にはいくつかあり、ログインデータを送信するためにどのようなものが使用されているかを把握する必要があります。今使用しているフォームにはフォームが1つしかありません。次に、すべての<input...>
タグを見つけます。このデータはフォームデータの一部として送信されます。特に関心を引く部分はまさにこのname=...
部分である。これは鍵キー=値ペアの一部である場合、入力する内容は次のとおりです。値部分。
作業中のページにはLogin
、、、Password
およびフィールドAdminSiteaccessURI
があります。これがテーブルの終わりです。もう見る必要はありません。これらのすべてのキーを適切な値で送信する必要があります。一部の値はユーザーが入力し、他の値はそのフィールドにすでに存在する値を使用できます。を見ると、最初に要求された実際のリソースのURIにサーバーが設定した属性があることがわかります。LoginButton
RedirectURI
</form>
Login
Password
RedirectURI
value=
もう1つの重要な情報:どのようにデータを送信しますか?これは<form...>
タグで確認できます。方法と行動があるでしょう。ジョブには完全なURLはありません。ベースには相対URLがありますが、完全なURLが必要なので、ベースを相対URLに追加してください。ジョブは送信するURLであり、ジョブはPOSTリクエストかGETリクエストかを知ることができます。使用しているページにはPOSTメソッドを介して送信されたデータが必要です。
ログインデータの送信
今何をコミットするのか分かったので、実際に行う必要があります。私たちはこれを使うことができますwget
。マニュアルページを見ると、--post-data=string
フォーマット方法を示すオプションがありますkey1=value1&key2=value2...
。で連結された各ペアのキー=値のみです&
。これが私たちに必要な唯一のオプションではありません。
認証トークンを覚えていますか?サーバーはそれを応答の一部として送り返すので、それを保存する必要があります。 「クッキー」のマニュアルページを見直すと、いくつかの重要なオプションが表示されます。--save-cookies file
そして--keep-session-cookies
。
これらのオプションを使用してコマンドラインを作成して実行します。送信するURLは、元々インポートしようとしたリソースではないことを覚えておいてください。属性が指すURLに送信する必要があります<form action=...>
。セッションCookieをファイルに保存し、可能であれば(wgetが正常にHTTPリダイレクトに従った場合)、PDFファイルを出力として保存する必要があります。 PDFファイルを入手できない場合は、別のリクエストを送信してください(今回は何もせず--post-data
)。今回は、「--load-cookies file」を使用する前に保存したクッキーが含まれています。
それは行わなければなりません!