![このフォームを cURL で入力して送信できますか?](https://rvso.com/image/1604271/%E3%81%93%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%20cURL%20%E3%81%A7%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%A6%E9%80%81%E4%BF%A1%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
職場のフォームにデータを送信しようとしています。私の素朴なアプローチが機能しないのは、ページ内の「テクノロジー」がそれを妨げているのではないかと考えています。基本的に、Webページ(ここではリンクできませんが、公開されていません)には
<form action="login.php" method="get" name="LogIn" class="form-signin">
そして、次のようないくつかの入力
<input type="text" class="form-control" id="docIdent" name="docIdent" placeholder="@" required>
そこで、次の cURL コマンドを試しています。
curl -d "docIdent=WHATEVER" -d "type=WHATEVER" -d "comment=" URL
必要な 3 つのデータは、次の方法で取得されたようです。1. .html をダウンロードする。2. フォーム メソッドを「post」から「get」に変更し、ブラウザーで開く。3. フォームに入力して送信する (もちろん、「ページが見つかりません」というエラーが表示されますが、新しい URL には、空の 3 番目のフィールドを含むすべてのデータが含まれていました)。
まあ、それは機能しません(同じログインページに戻り、試した時点でログインがなかったことが確認できます)。私はこれらのことについてあまり詳しくありませんが、ページにない他のコードである可能性があると思います。
<script src="dist/js/bootstrap.min.js"></script>
<script src="dist/js/jquery-3.4.1.min.js"></script>
<script src='js/fns.js'></script>
そしてもちろん、フォームを開くと「login.php」があります。他の多くの投稿から、私の構文は正しいようですが、自動ログインの見込みはありますか (私が試しているワンライナーのような、cron に配置するタイプの bash スクリプト)? ありがとうございます。
答え1
結局、次の解決策を見つけました。ブラウザ (Firefox、Web 開発ツール) を使用してリクエストをキャプチャしました。次のようになりました。
curl 'URL' -H 'Host: SOMETHING' -H 'User-Agent: SOMETHING' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en,en-US;q=0.5' --compressed -H 'Referer: SOMETHING' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' --data 'WHATEVER'
... 加えて、毎回変更されない残りの部分で十分かどうかを確認したかったので、Cookie 情報を削除しました。そして、うまくいきました。役に立つサポートをしてくれた grawity に感謝します。
答え2
Firefox Web-Tools を使用して、すべての HTTP リクエスト (GET または POST フォーム) をキャプチャできます。
Webツール -> ネットワーク -> フォームの送信 -> フォームURLのコンテキストメニュー(フォームスクリプトを右クリック) -> コピー => cURLアドレスとしてコピー
答え3
投稿するときは-X ポスト
送信したいデータは次の形式で指定します: --データ生 'フォームフィールド1=値1&フォームフィールド2=値2'
curl 'http://localhost:8000/' -X POST --data-raw 'fname=John&lname=Smith'