【问题标题】:wget not completely processing the http callwget 没有完全处理 http 调用
【发布时间】:2011-06-10 09:53:31
【问题描述】:

这是一个执行由第三方托管的 HTML / PHP 堆栈报告套件的 wget 命令 - 我们无法控制 PHP 或 HTML 页面

wget --no-check-certificate --http-user=/myacc --http-password=mypass -O /tmp/myoutput.csv "https://myserver.mydomain.com/mymodule.php?myrepcode =9999&action=exportcsv&admin=myappuserid&password=myappuserpass&startdate=2011-01-16&enddate=2011-01-16&reportby=mypreferredview"

所有元素都运行良好:

--http-user / --http-pass 由浏览器标准弹出窗口提供,用于用户名和密码提示 -O /tmp/myoutput.csv - 感兴趣的输出文件

https://myserver.mydomain.com/mymodule.php?myrepcode=9999&action=exportcsv&admin=myappuserid&password=myappuserpass&startdate=2011-01-16&enddate=2011-01-16&reportby=mypreferredview"

由参数动态生成的文件

myrepcode=9999 - 对相关报告的引用 action=exportcsv 内部写在函数中 admin=myappuserid 第三方操作 SSL 访问站点 - 然后将内部用户名和密码存储在数据库中以访问站点的功能) 密码=myappuserpass startdate=2011-01-16 this 和 end data 是报表 9999 特有的参数 结束日期=2011-01-16 reportby=mypreferredview 这是报告中的一个选项,有助于不同级别的详细信息或聚合

问题在于reportby参数是5个选项列表中的一个单选按钮选择(当然我足够默认是最高级别的聚合,我想要最详细的最后一个)

这是reportby选项的HTML页面代码示例

HTML 中的标签未列入白名单 - 所以如果需要,我会发送示例

<td>View by</td>
<td>
   <input class="naf-radio" name="reportby" id="reportby[thedefault]" value="thedefault" type="radio">The Default                    
   <input class="naf-radio" name="reportby" id="reportby[myleastpreferred]" value="myleastpreferred" type="radio">My Least Preferred
   <input class="naf-radio" name="reportby" id="reportby[mysecondleastpreferred]" value="mysecondleastpreferred" type="radio">My Second Least Preferred
   <input class="naf-radio" name="reportby" id="reportby[mythirdleastpreferred]" value="mythirdleastpreferred" type="radio">My Third Least Preferred
   <input class="naf-radio" name="reportby" id="reportby[mypreferred]" value="mypreferred" type="radio">My Preferred
</td>

无论我在 wget 语句中选择哪个报告项 - 始终执行默认值。

问题

1) 有没有人在 HTML 中遇到过这种表示法 (id=inputname[inputelement]) 我与一位资深网络开发人员交谈过,他从未见过这种输入表示法 (id=inputname[inputelement]) - 根据广泛的搜索,w3schools 似乎也不熟悉这种表示法

2) wget 命令在执行命令时可以选择非默认单选项目吗?

这可能最初会通过“使用 CURL”响应收到 - 但是 wget 方法在我操作的有限环境中非常有效 - 特别是当我需要下载 10000 个此类项目时。

感谢您的回复

【问题讨论】:

    标签: html wget radiobuttonlist


    【解决方案1】:

    单选按钮只是另一个表单元素,通常可以通过查询字符串传递。一些应用程序会要求将参数作为 POST 数据传递,但根据我的经验,这并不常见。

    您需要做的是找到单选按钮的名称和所需选项上的值。然后,您只需将&amp;name=value 添加到您当前的网址,它应该就像选择该单选按钮一样。

    符号id=inputname[inputelement] 可以存在于javascript 或类似语言中,但不能存在于HTML 中。在 HTML 中,它只是 name=value 类型的声明(以及属性和其他内容)。在这种情况下,我会假设这个字符串应该在生成 HTML 的任何代码中被解释,而不是呈现到屏幕上。

    您还需要确保对您在 url 中输入的任何值进行 urlencode,以确保它们不包含任何非法字符(例如 & 或 = 会完全混淆它)。

    如果查询字符串方法不起作用,那么 wget 有一个--post-data 开关,允许您指定要发布的数据,而这正是表单的功能。如果你使用--post-data=reportby=mypreferred,我希望你能取得更大的成功。

    如果这仍然失败,那么我将使用一些工具通过浏览器查看您的 wget 请求以及您的请求,并比较标头和数据以查看它们的不同之处。一个这样的工具是提琴手(http://www.fiddler2.com/fiddler2/)虽然我相信还有很多其他的。

    【讨论】:

    • 感谢克里斯的建议 - 但我认为这有点奇怪......关于“......然后你只需将 &name=value 添加到你当前的网址,它应该就像选择那个下拉菜单一样选项。” 这正是我们所做的,但如前所述,它忽略了调用 &reportby=mypreferredview ...这些标签元素位于 HTML td 标签集内 - 所以这与 not in JAVA 语句冲突 - 感谢您的输入
    • 更正:not in JAVA 语句应该已经阅读 - 可能存在于 javascript 中但不存在于 HTML 中。 - 如前所述,HTML 标记 td 包含 id=inputname[inputelement] 子句
    • 我刚刚在您的问题中找到了 HTML(您需要使用代码格式将其标记为代码,否则它会将其视为 HTML 而不是您要显示的内容)您应该能够将&amp;reportby=mypreferred 添加到您的网址末尾来执行此操作。在计算提交的表单数据时,不使用 id,只使用名称和值。我猜这个 id 语法是一个错误,应该在它被渲染为 HTML 之前被解释为一个 id。
    • 我现在猜测服务器不允许在 url 中指定它,只能在 post 数据中指定。你可以试试 --post-data=reportby=mypreferred 看看它是否更喜欢它(也会用这个更新我的答案)。
    • 克里斯 - --postdata= - 完美!非常感谢 - 让我摆脱了巨大的困境
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多