我正在尝试通过PHP CURL库提交表单。问题是有一个隐藏的输入字段,其值在每次刷新后发生变化,这意味着当我发送到不同的请求以读取页面内容时它会发生变化。我需要在我的POST请求中的其他字段之间发送隐藏的值,以便成功提交表单提交。因为我要提交的表单的操作是"本身" (同一页面)我不知道如何获取隐藏的输入值,将其放入POST请求并发送POST请求,这将被视为大致同时发生。我已经为我的CURL使用了一个特定的库,所以即使我分享代码你也不会完全理解它。不管怎样,我想我已经清楚地解释了我对此感到困惑。期待收到你的回复。
P.S。您可能会说,它不会同时发生,一个请求获取表单,另一个请求发送POST请求。实际上,问题是当我获取页面内容以获取隐藏值(TOKEN)时它具有值" X"当我想在它之后发送POST请求时,它将具有值" Y"。我想要" X"并利用它来提交表格" X"要有价值" Y"。这是解释我想要的最简单的方法。
答案 0 :(得分:0)
我曾经在类似的情况下工作过。
这应该是你的策略:
首先向包含表单的链接发出CURL请求。
解析页面html并使用正则表达式匹配或任何其他库读取表单隐藏字段(__RequestVerificationToken)值。
使用__RequestVerificationToken进行下一次请求。
正如您所提到的,下一个请求将返回表单html,从响应html中再次获取__RequestVerificationToken隐藏字段值。
- 将其用于后续请求并重复相同的过程。
醇>
因为你没有透露更多细节。我假设您正在使用PHP
向基于.NET
的网站表单提交数据。如果是这种情况,只需捕获__RequestVerificationToken即可。您必须处理其他敏感的headers
,例如Cookies
,User-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上提供一个单行。