Php 作为cron作业的一部分提交表单

Php 作为cron作业的一部分提交表单,php,curl,cron,Php,Curl,Cron,我有一个url,作为项目更广泛过程的一部分,我需要访问它,我知道它在我登录时可以工作,但显然作为cron工作的一部分,它不会。如果是htaccess,我只需使用curl或wget并传递接受的用户名和密码参数 我已经在这个特定的cron上尝试过了,但是它似乎没有执行与url相关联的任务。见下例: curl-u用户名:密码http://www.example.com(我通常会将dev/null 2>&1作为cron的一部分,但我现在希望看到输出) 然而,问题是该页面位于表单登录之后,我不确定如何使用

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

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

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

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

如果您有任何帮助或建议,我们将不胜感激。

使用Curl: 您可能需要使用POST方法传递表单登录参数。检查表单的HTML以确保

要使用curl执行POST请求,请参阅

这可能不适用于某些表单,这些表单实现了。要解决这个问题,您需要解析HTML,找到CSRF令牌,并将其作为POST请求的数据参数之一传递

接下来,登录很可能返回一个cookie。您的浏览器通常会保存这些内容,并在每个页面请求时将cookie返回给网站。您需要指定一个cookie文件。看

根据网站的不同,可能会有一些调查来解决任何更复杂的登录方案

使用自动web浏览器 更简单的选择是使用自动化浏览器,如SeleniumWebDriver。有一些脚本接口可以使用,比如(RubyGem)。使用Capybara和Selenium来控制浏览器,您可以避免网站可能使用的任何技术,这些技术使得使用CURL变得困难(例如,如果他们检测并阻止机器人)

缺点是您需要安装它。然而,一旦您这样做了,您就可以使用简单的命令来做一些事情,例如
visit('http://www.google.com)
单击链接(“链接文本”)

另见:

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'

您可以将所有参数传递给表单
action
url,而不是表单本身(表单只是用于通信的UI部分)。curl-d“username=[YOUR username]&password=[YOUR password]”www.example.com/cronjob.phpy如果添加了[php]标记,您可以提供php代码吗?调用cron作业脚本并在其代码中使用
$\u SERVER['PHP\u AUTH\u USER']
$\u SERVER['PHP\u AUTH\u PW']
时,您是否尝试提交用户名和密码?