1

我正在开发一个 webbot,我遇到了这个奇怪的页面,其中多个变量具有相同的名称但不同的值,如 Firefox Web 控制台所示。我不确定如何在 python 中复制这种行为。目前,我正在使用 requests 库来发出 post 请求,并接收名称和值对的字典。当然,字典有唯一的键。所以我想知道是否有人可以告诉我如何发送带有多个具有相同名称的变量的帖子请求。

sel_subj:dummy
sel_subj:ECE

谢谢, 拉吉夫

编辑:这是导致此问题的 html 源代码

<input type="hidden" value="dummy" name="rsts"></input>
<input type="hidden" value="dummy" name="crn"></input><br></br>
<input type="hidden" value="120138" name="term_in"></input>

**<input type="hidden" value="dummy" name="sel_subj"></input>**

<input type="hidden" value="dummy" name="sel_day"></input>
<input type="hidden" value="dummy" name="sel_schd"></input>
<input type="hidden" value="dummy" name="sel_insm"></input>
<input type="hidden" value="dummy" name="sel_camp"></input>
<input type="hidden" value="dummy" name="sel_levl"></input>
<input type="hidden" value="dummy" name="sel_sess"></input>
<input type="hidden" value="dummy" name="sel_instr"></input>
<input type="hidden" value="dummy" name="sel_ptrm"></input>
<input type="hidden" value="dummy" name="sel_attr"></input>
<table class="dataentrytable" summary="Table is used to present the course search criteria">     
    <tbody>
        <tr>
            <td class="delabel" scope="row"> … </td>
            <td class="dedefault" colspan="37">

                **<select id="subj_id" multiple="" size="10" name="sel_subj"> … 
                </select>**

             </td>
         </tr>
     </tbody>
</table>

请注意选择标签和突出显示的输入标签如何具有相同的名称。

4

2 回答 2

1

我知道的唯一方法是使用附加 [] 的变量名。

<input type="hidden" value="dummy" name="sel_subj[]"></input>
<input type="hidden" value="ECE" name="sel_subj[]"></input>

这导致放置在 中的数组$_POST['sel_subj']$_POST['sel_subj'][0]“虚拟的”并且$_POST['sel_subj']是 ECE。

现在我想到了,我认为当附加了 [] 时,数组的创建是由 php-parser 完成的。这表明这两个值都是通过 POST 发送的,即使名称末尾没有 []。也许可以将 PHP 配置为不忽略此值。

于 2013-08-04T18:35:05.777 回答
1

如果是 GET 变量(在 url 中),您可以有多个具有相同名称的值。您可以只解析整个 url 并读取和使用每个值。

如果您添加参数名称,PHP 甚至会自动解决此问题[]。在这种情况下,它会自动将其更改为数组。但这也是一个技巧。编写一段代码,用重复的名字做同样的事情,而不用它们[]作为后缀是相当容易的。

它们同样会发生在变量后。您可能需要更多代码才能正确阅读它们。

这种情况下的代码可能会检查是否存在sel_subjdummy. 如果是这种情况,则使用该值。如果它不存在,sel_subj则可能仍然存在 value dummy。这可能表明该脚本已发布表单,但未选择任何值。

所以实际上,我认为解释这个脚本是如何工作的很容易,甚至可能解释为什么,但我认为以这种方式将所有默认值放在隐藏字段中并不是一个很好的解决方案,所以我建议你不要尝试复制此解决方案。:-)

于 2013-08-04T18:35:50.967 回答