2013-08-04 66 views
1

我正在研究webbot,並且遇到了這個奇怪的頁面,其中多個變量具有相同的名稱,但具有不同的值,如Firefox Web控制檯所示。我不知道如何在python中複製這種行爲。目前,我正在使用請求庫進行發佈請求,並接收名稱和值對的字典。當然,字典有獨特的關鍵。所以我想知道是否有人能告訴我如何發送帶有同名多個變量的發佈請求。POST請求中有多個相同名稱的變量

sel_subj:dummy 
sel_subj:ECE 

感謝, 拉吉夫

編輯:這是導致此

<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> 

注意選擇標籤和高亮的輸入標籤如何具有相同的名稱HTML源代碼。

+0

好奇的問題!網站如何區分不同的變量?如果你做了'$ _POST ['name']'訪問,你可能只能得到其中的一個?你知道你在看的網站是如何完成的嗎? – Floris

+0

不幸的是,我沒有訪問網站的來源。我一開始也發現這種情況令人震驚,但他們在整個網站中發現了很多情況,firefox發佈了多個具有相同名稱的變量,並且我可以自信地說網站使用了所有這些變量的值。確實有一些方法。我可能會嘗試建立一個虛擬網站,看看它是如何工作的。 –

回答

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分析器完成的。這表明,即使名稱末尾沒有[],兩個值都通過POST發送。也許PHP可以配置爲不關閉這個值。

1

在GET變量的情況下(在url中),可以有多個具有相同名稱的值。您可以解析整個url並閱讀和使用每個值。

如果您將[]添加到參數的名稱,PHP甚至會自動解決此問題。在這種情況下,它會自動將其更改爲數組。但這也是一個竅門。編寫一段代碼可以非常容易地完成重複名稱相同的事情,而不必將[]作爲後綴。

他們同樣會發生post變量。您可能需要更多的代碼才能正確讀取它們。

這種情況下的代碼可能檢查是否有sel_subjdummy以外的任何值。如果是這種情況,則使用該值。如果不存在,則sel_subj可能仍然存在,值爲dummy。這可能表明表單已發佈,但沒有選擇任何值。所以實際上,我認爲解釋這個腳本的工作原理是很容易的,甚至可能是爲什麼,但我認爲這並不是一個很好的解決方案,所有的默認值都是這樣隱藏在隱藏字段中的,所以我建議你不要試圖複製這個解決方案。 :-)

相關問題