【问题标题】:CURL, How to fetch variable hidden input value and send POST request simultaneously(with one request)?CURL,如何获取变量隐藏输入值并同时发送 POST 请求(一个请求)?
【发布时间】:2015-05-21 15:13:04
【问题描述】:

我正在尝试通过 PHP CURL 库提交表单。问题是有一个隐藏的输入字段,每次刷新后它的值都会发生变化,这意味着当我发送不同的请求以读取页面内容时它会发生变化。我需要在我的 POST 请求中的其他字段之间发送隐藏值,以便成功提交表单。由于我要提交的表单的操作是“本身”(同一页面)我不知道如何要获取隐藏的输入值,请将其放入 POST 请求中并发送大致同时的 POST 请求。我为我的 CURL 使用了一个特定的库,所以即使我分享代码你也不会完全理解它。无论如何,我想我已经清楚地解释了我的困惑。期待收到您的来信。
P.S.您可能会说,这不会是同时的,一个请求获取表单,另一个请求发送 POST 请求。实际上,问题是当我获取页面内容以获取隐藏值(TOKEN)时,它的值是“X”,当我想在它之后发送 POST 请求时,它的值是“Y”。我想要“X”并在提交表单时使用它,“X”将取值“Y”。这是解释我想要什么的最简单的方法。

【问题讨论】:

  • 你想逃避某种 XSRF 令牌吗?
  • @DamienPirsy 是的,我认为它会被称为 XSRF。 __RequestVerificationToken=MYq_REyEAaX6IUDQy5J7h3dKQnOdSWb23vE55nvc0r_y1IxADbputJY - 像这样
  • 抱歉,如果您不显示代码,将无法提供帮助。让我们了解您的代码中适当简化和简化的部分。
  • 我希望隐藏值在从服务器请求时成为表单的一部分。当然,在发回表单时,您可能必须将此类令牌发送回服务器,但这不在同一个请求中。一个请求获取表单,一个请求发布。那么这里有什么问题呢?
  • 好的,好的。抱歉,只是想帮忙。

标签: php curl page-refresh


【解决方案1】:

曾经我处理过类似的场景。

这应该是适合你的策略:

  1. 首先向包含表单的链接发出 CURL 请求。

  2. 解析页面 html 并使用正则表达式匹配或任何其他库读取表单隐藏字段 (__RequestVerificationToken) 值。

  3. 为您的下一个请求使用 __RequestVerificationToken。

  4. 正如你提到的下一个请求将返回表单 html,再次从响应 html 中获取 __RequestVerificationToken 隐藏字段值。

  5. 将其用于后续请求并重复相同的过程。

因为你没有告诉更多细节。我假设您正在使用PHP 将数据提交到基于.NET 的网站表单。如果是这种情况,仅捕获 __RequestVerificationToken 是不够的。您必须照顾其他敏感的headers,例如CookiesUser-Agent、任何类型的自定义标头等。

【讨论】:

  • 这正是我在上面的评论中所描绘的。 OP声称这不起作用。
  • 它可能不起作用,因为该令牌的目的是防止伪造攻击。可能有一个具有相同令牌的会话变量要与请求匹配,并且当请求来自外部源时不会发生这种情况
  • 您必须将几乎mimic 的所有浏览器功能添加到您的编码中,就好像请求是通过带有所有标头等的真实浏览器发送的一样。还有任何一种基于Javascript 的散列安全性吗?有时,安全令牌是在使用 js 单击提交按钮时随机生成的。
  • 您是否从头开始使用 PHP? pecl_http 可以像请求处理一样处理浏览器pecl.php.net/package/pecl_http
  • @adnan 是的,我去看看。
【解决方案2】:

“grep-to-variable”位在 Mac OS 上的工作方式不同,因为没有“grep -P”。 (详见grep -P no longer works how can I rewrite my searches。)

假设 HTML 页面中有五个类似的实例:

<input name="_dynSessConf" value="-5345230103218767463" type="hidden"></input>

...我使用 curl 命令将我的页面下拉到“output.txt”中,然后使用 RegEx 通过 perl 将 _dynSessConf 的值拉到环境变量中。

dynSessConf=$(perl -nle 'print $& if m{.*_dynSessConf" value="\K[^"]+}' output.txt | tail -1)

我知道这不是您正在寻找的“单线”,但它可能会经过调整以在 Mac 上为您提供单线。

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2014-11-19
    • 2021-05-18
    相关资源
    最近更新 更多