CURL,如何获取变量隐藏输入值并同时发送POST请求(有一个请求)?

时间:2015-05-21 15:13:05

标签: php curl page-refresh

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

2 个答案:

答案 0 :(得分:0)

我曾经在类似的情况下工作过。

这应该是你的策略:

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

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

  4.   
  5. 使用__RequestVerificationToken进行下一次请求。

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

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

因为你没有透露更多细节。我假设您正在使用PHP向基于.NET的网站表单提交数据。如果是这种情况,只需捕获__RequestVerificationToken即可。您必须处理其他敏感的headers,例如CookiesUser-Agent,任何类型的自定义标题等。

答案 1 :(得分:0)

“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上提供一个单行。