cURLを使用してフォームを送信すると、動作する場合もあり、動作しない場合もあります。

cURLを使用してフォームを送信すると、動作する場合もあり、動作しない場合もあります。

Drupal 6でフォームを作成(ノード作成)するには、このコマンドを使用します。

curl -b cookies.txt -d "title=thetitle&menu%5Blink_title%5D=&menu%5Bparent%5D=primary-links%3A0&menu%5Bweight%5D=0&teaser_include=1&body=content+here&format=1&changed=&form_build_id=form-01fbf44be3dab1ea177d17544bce415c&form_token=f1af1b01946065a34e49fdbde8fcc64b&form_id=story_node_form&log=&comment=2&pathauto_perform_alias=1&field_pidio%5B0%5D%5Bembed%5D=&name=admin&date=&status=1&promote=1&op=Save" http://localhost/subdo/node/add/story

問題なく動作します。端末にメッセージがなく、期待どおりにノードが Drupal に生成されます。

しばらくして、コードを修正せずに再利用しました。ただし、端末は新しいノードを表示するのではなく、フォームのHTMLコードを表示します。 cURLが「保存」ボタンを押さないようです。

ベストアンサー1

ドルファルフォームは通常、プレビュー/承認ステップを必要とする2段階のプロセスです。表示されるフォームは同じで、最初のフォームから送信された値で事前入力されています。ただし、ページにはジョブのプレビューと次のフォームの送信を示す非表示のフォームフィールドもあります。プレビューから出てくるので、実際にデータを保存する必要があります。

違いは一般的に名前送信ボタン。プレビューが必要なフォームで[送信]ボタンをクリックすると、プレビューop=Previewページのフォームに送信され、ジョブが配信されますop=Save。良いニュースは、サーバー側でこのプレビューステップを実際に追跡するのではなく、フォームの手がかりを使用して現在のステップを知ることができることです。 like で行うように自動化された方法で送信すると、curl初期フォームの値を使用するのではなく、送信を含む実際の保存に直接移動できます。op=Save

また、ドルファルフォームは通常、一意の識別子またはトークンを使用して追跡されます。これらのフォームを自動的に送信するには、ダウンロードページを使用してそれを解析して、独自のcurlトークンを含むフォームフィールドを取得する必要がありますform_tokenDP7)POSTに対応するキー/値のペアを含めます。

少なくともドルファル7これらの技術を組み合わせるには問題はありません。フォームトークンはプレビューから最終バージョンに変更されないため、トークンを受け取るとすぐに最終保存POSTに移動できます。

おすすめ記事