提交表单作为 cron 作业的一部分
Submit a form as part of a cron job
我有一个 url 作为项目更广泛流程的一部分,我需要访问它,我知道它在我登录时有效,但显然作为 cron 作业的一部分它不会是。如果它是 htaccess,我将简单地使用 curl 或 wget 并传递接受的用户名和密码参数。
我已经在这个特定的 cron 上试过了,但它似乎没有执行与 url 关联的任务。请参见下面的示例:
curl -u username:password http://www.example.com
(我通常会将 dev/null 2>&1 作为 cron 的一部分,但我现在希望看到输出)
然而,问题是此页面位于表单登录后面,我不确定如何使用 cron 作业将参数传递给该表单。
如有任何帮助或建议,我们将不胜感激。
使用卷曲:
您将需要传递表单登录参数,可能使用 POST 方法。检查表单的 HTML 以确保。
要使用 curl 执行 POST 请求,请参阅 https://superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request。
这可能不适用于某些实现 CSRF 的表单。要解决此问题,您需要解析 HTML,找到 CSRF 令牌,并将其作为 POST 请求的数据参数之一传递。
接下来,登录最有可能returns一个cookie。您的浏览器通常会保存它,并在每次页面请求时将 cookie 返回给网站。您将需要指定一个 cookie 文件。参见 Send cookies with curl。
可能需要进行一些调查来解决任何更复杂的登录方案,具体取决于网站。
使用自动网络浏览器
更简单的替代方法是使用自动浏览器,例如 Selenium webdriver。您可以使用脚本接口,例如 Capybara(ruby gem)。使用 Capybara 和 Selenium 来控制浏览器,您可以避免网站可能拥有的任何使使用 CURL 变得困难的技术(例如,如果它们检测并阻止机器人)。
缺点是需要安装。然而,一旦你这样做了,你就可以使用简单的命令来做一些事情,例如 visit('http://www.google.com')
, click_link('Link Text')
, ...
另见:
require 'capybara'
session = Capybara::Session.new(:webkit, my_rack_app)
session.within("//form[@id='session']") do
session.fill_in 'Email', :with => 'user@example.com'
session.fill_in 'Password', :with => 'password'
end
session.click_button 'Sign in'
我有一个 url 作为项目更广泛流程的一部分,我需要访问它,我知道它在我登录时有效,但显然作为 cron 作业的一部分它不会是。如果它是 htaccess,我将简单地使用 curl 或 wget 并传递接受的用户名和密码参数。
我已经在这个特定的 cron 上试过了,但它似乎没有执行与 url 关联的任务。请参见下面的示例:
curl -u username:password http://www.example.com
(我通常会将 dev/null 2>&1 作为 cron 的一部分,但我现在希望看到输出)
然而,问题是此页面位于表单登录后面,我不确定如何使用 cron 作业将参数传递给该表单。
如有任何帮助或建议,我们将不胜感激。
使用卷曲:
您将需要传递表单登录参数,可能使用 POST 方法。检查表单的 HTML 以确保。
要使用 curl 执行 POST 请求,请参阅 https://superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request。
这可能不适用于某些实现 CSRF 的表单。要解决此问题,您需要解析 HTML,找到 CSRF 令牌,并将其作为 POST 请求的数据参数之一传递。
接下来,登录最有可能returns一个cookie。您的浏览器通常会保存它,并在每次页面请求时将 cookie 返回给网站。您将需要指定一个 cookie 文件。参见 Send cookies with curl。
可能需要进行一些调查来解决任何更复杂的登录方案,具体取决于网站。
使用自动网络浏览器
更简单的替代方法是使用自动浏览器,例如 Selenium webdriver。您可以使用脚本接口,例如 Capybara(ruby gem)。使用 Capybara 和 Selenium 来控制浏览器,您可以避免网站可能拥有的任何使使用 CURL 变得困难的技术(例如,如果它们检测并阻止机器人)。
缺点是需要安装。然而,一旦你这样做了,你就可以使用简单的命令来做一些事情,例如 visit('http://www.google.com')
, click_link('Link Text')
, ...
另见:
require 'capybara'
session = Capybara::Session.new(:webkit, my_rack_app)
session.within("//form[@id='session']") do
session.fill_in 'Email', :with => 'user@example.com'
session.fill_in 'Password', :with => 'password'
end
session.click_button 'Sign in'