【问题标题】:Submit a form as part of a cron job提交表单作为 cron 作业的一部分
【发布时间】:2016-01-05 22:54:47
【问题描述】:

我有一个 url,作为项目更广泛流程的一部分,我需要访问它,我知道它在我登录时有效,但显然作为 cron 工作的一部分,它不会。如果是 htaccess,我会简单地使用 curl 或 wget 并传递接受的用户名和密码参数。

我已经在这个特定的 cron 上尝试过,但它似乎没有执行与 url 关联的任务。请参见下面的示例:

curl -u username:password http://www.example.com(我通常会将 dev/null 2>&1 作为 cron 的一部分,但我现在希望看到输出)

但是,问题是该页面位于表单登录后面,我不确定如何使用 cron 作业将参数传递给该表单。

任何帮助或建议将不胜感激。

【问题讨论】:

  • 您可以将所有参数传递给表单action url,而不是通过表单本身(表单只是用于通信的UI部分)。
  • curl -d "username=[YOUR USERName]&password=[YOUR Password]" www.example.com/cronjob.php
  • 您添加了 [php] 标签,能否提供您的 PHP 代码?您是否尝试在调用 cron 作业脚本并在其代码中使用 $_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW'] 时提交用户名和密码?

标签: php curl cron


【解决方案1】:

使用卷曲:

您将需要传递表单登录参数,可能使用 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 请求的数据参数之一传递。

接下来,登录很可能会返回一个 cookie。您的浏览器通常会保存此信息,并在每个页面请求时将 cookie 返还给网站。您将需要指定一个 cookie 文件。见Send cookies with curl

可能需要进行一些调查以解决任何更复杂的登录方案,具体取决于网站。

使用自动网络浏览器

更简单的选择是使用自动化浏览器,例如 Selenium webdriver。您可以使用一些脚本接口,例如Capybara(红宝石宝石)。使用 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2016-10-06
    • 2019-04-02
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多