簡體   English   中英

模擬提交在線表單的正確 HTTP POST 請求(使用 HTML、cURL 或 python)

[英]Proper HTTP POST request to mimic submitting an online form (using HTML, cURL or python)

問題描述:我無法弄清楚我的 HTTP 請求中缺少什么以在此表單后進入下一頁:當我從我的代碼執行此操作時,我登陸了“歡迎”頁面,而不是從預期的頁面登陸下面的第 2 步:

  1. 第 1 步:填寫以下內容並在瀏覽器中單擊“搜索”:

  2. 第 2 步:我進入下一頁:

我已經查找了所有發布的表單數據,並在此處做了一個簡化的預填表單,但在這種情況下單擊“搜索”不起作用:

我試過的

  • 我已經閱讀了這個建議不要簡化表單的線程,但我相信我這樣做是正確的:我知道的所有字段都存在,我只是更改了它們的 HTML 可視化(這與發布的內容無關)。
  • 可以在服務器端檢查 jspSynchronizerToken 字段,因此我已經嘗試使用在同一瀏覽器中檢索到的有效值手動填寫它。 僅此而已並不能解決問題。
  • 我曾嘗試使用以下 cURL 命令,但這也不起作用:
curl -A "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0" \
    -F 'pageName=com/sed/jsp/reports/ItdReportInput.jsp' \
    -F 'menukey=15.03.00' \
    -F 'locale=en_CA' \
    -F 'jspSynchronizerToken=BzDQe5n2dIhV4LHKyqV_u341627003039920' \
    -F 'PUBLIC_USERS=0' \
    -F 'FORMAT=TXT' \
    -F 'SORTED_BY=0' \
    -F 'SELECT_TYPE=8' \
    -F 'SELECT_TYPE_VALUE=Test' \
    -F 'SELECT_TYPE_VALUE_SEARCH_TYPE=0' \
    -F 'DATE_RANGE_TYPE=0' \
    -F 'MONTH_FROM_PUBLIC=0' \
    -F 'DAY_FROM_PUBLIC=1' \
    -F 'YEAR_FROM_PUBLIC=2020' \
    -F 'MONTH_TO_PUBLIC=11' \
    -F 'DAY_TO_PUBLIC=31' \
    -F 'YEAR_TO_PUBLIC=2020' \
    -F 'Search=Search' \
    https://www.sed.com/sed/SVTItdController?locale=en_CA \
> ~/Downloads/sed.html
  • 我還編寫了一個更深入的 Python 版本,在該版本中我提供了引用者以及從步驟 1 中檢索到的令牌,但沒有成功。 (此代碼可用,但它只是上述簡化代碼的可讀性較差的版本,因此我沒有看到發布的意義,如果我錯了,請告訴我)。
  • 我已經考慮過 cookie 和 javascript 可能是問題所在,但是沒有 javascript 或 cookie 的瀏覽器允許正確提交表單並獲得正確的結果。
  • 我目前正在使用 Charles Proxy 查看請求/響應,但到目前為止我沒有得到任何新的見解......

我意識到這個問題有點特定於我展示的網站,但在我看來,對網站如何處理 HTTP 請求以及如何有效地模仿可以通過正確答案獲得的那些請求有一個通用的理解。 我過去有過類似的其他經歷,我希望能夠一勞永逸地正確理解這一點:)

結果證明該解決方案是字符串中的錯誤以及從 Web 開發工具復制/粘貼 URL 編碼的組合。 特別是,我的帶有空格的字符串應該保留空格而不是使用加號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM