0

这是一个执行由第三方托管的 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 enddate=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 语句中选择哪个 reportby 项目 - 始终执行默认值。

问题

1) 有没有人在 HTML 中遇到过这种表示法 (id=inputname[inputelement]) 我曾与一位高级 Web 开发人员交谈过,他从未见过这种输入表示法 (id=inputname[inputelement]) - w3schools 似乎并不熟悉这要么基于广泛的搜索

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

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

提前感谢回复

4

1 回答 1

0

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

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

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

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

如果 querystring 方法不起作用,那么 wget 有一个--post-data开关,允许您指定要发布的数据,这就是表单的功能。如果你使用--post-data=reportby=mypreferred我希望你应该有更多的成功。

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

于 2011-01-17T11:59:17.640 回答