【问题标题】:curl: downloading from dynamic urlcurl:从动态 url 下载
【发布时间】:2011-02-03 02:01:59
【问题描述】:

我正在尝试在 bash 中下载带有 curl 的 html 文件。喜欢这个网站: http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S&subareasel=PHYSICS&idxcrs=0001B+++

当我手动下载它时,它工作正常。但是,当我尝试通过 crontab 运行我的脚本时,输出的 html 文件非常小,只显示“对象已移至此处”。链接断开。这是否与 crontab 命令运行的稀疏环境有关?我发现了这个问题:

php ssl curl : object moved error

但我使用的是 bash,而不是 php。要设置哪些等效的命令行选项或变量来解决 bash 中的此问题?

(我想使用 curl,而不是 wget)

编辑:嗯,有时手动下载文件(通过交互式 shell)可以工作,但有时不能(我仍然收到“对象已移至此处”消息)。因此,这可能不是 cron 环境的具体问题,而是 curl 本身的问题。

cron 条目:
* * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1

test.sh:

#! /bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/sbin
cd ~/.class

course="physics 1b"
url="http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S<URL>subareasel=PHYSICS<URL>idxcrs=0001B+++"

curl "$url" -sLo "$course".html  --max-redirs 5

编辑:问题已解决。问题是网址中的杂散标签。这是因为我正在使用 sed s,"&lt;URL&gt;",\""$url"\", template.txt &gt; test.sh 来生成脚本,并且 sed 用正则表达式 &lt;URL&gt; 替换了 &amp; 的所有实例。修复 url 后,curl 工作正常。

【问题讨论】:

    标签: html bash curl download dynamic-url


    【解决方案1】:

    您需要 -L--location 选项,它遵循 300 系列重定向。 --maxredirs [n] 将 curl 限制为 n 重定向。

    奇怪的是,这可以在交互式 shell 中工作。您是否获取相同的网址?您可以随时尝试在您的 cron 条目中获取您的环境脚本:

    * * * * * . /home/you/.bashrc ; curl -L --maxredirs 5 ...
    

    编辑:示例网址与脚本中的网址有些不同。脚本中的$url 有一对额外的&lt;URL&gt; 标签。用&amp; 替换它们,GET 请求的常规参数分隔符对我有用。

    【讨论】:

    • 使用 -L 选项会有所帮助,但不能解决问题。它没有“对象已移至此处”消息,但它下载的页面只有站点的错误消息 - “系统当前不可用或离线”,而不是它想要的页面。
    • 是的,我用相同的 url 测试它。我没有 .bashrc 文件,我不知道采购环境脚本是否有帮助..
    • 很好,它有些不同。我正在使用 sed 将 url 替换为脚本,但我不知道替换字段中 &amp; 字符的行为。谢谢。
    【解决方案2】:

    如果没有看到您的脚本,很难猜测到底发生了什么,但您推测这很可能是环境问题。

    通常有帮助的一件事是在脚本中指定可执行文件和文件的完整路径。

    如果您显示您的脚本和 crontab 条目,我们可以提供更多帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多