我遇到了问题。 我想用CURL登录网站,但页面会生成一个密钥,该密钥位于隐藏字段中。所以我必须抓住隐藏领域的价值...之后,我必须提交密码,电子邮件和抓取密钥。CURL抓取信息并用它登录
这可能吗?
希望你明白
感谢
---- ----编辑如果 的页面重载,有一个在隐藏字段..和老的一个新的密钥不工作
我遇到了问题。 我想用CURL登录网站,但页面会生成一个密钥,该密钥位于隐藏字段中。所以我必须抓住隐藏领域的价值...之后,我必须提交密码,电子邮件和抓取密钥。CURL抓取信息并用它登录
这可能吗?
希望你明白
感谢
---- ----编辑如果 的页面重载,有一个在隐藏字段..和老的一个新的密钥不工作
是的。
$contents = file_get_contents(...);
)。$matches = preg_match(..., ...); $key = $matches[1];
)。$context = streamcontextcreate(...); $data = file_get_contents(..., false, $context);
)。是的,这是可能的。基本步骤是:
1. Fetch form
2. Run returned data through DOMdocument to extract the hidden form field's value
3. Post login data, including the key value from step #2
4. ???
5. Profit
是的,这是可能的。
你甚至可以
$源抓取页面=用htmlspecialchars(的file_get_contents($网址));
然后用strpos,substr等获得(这是最简单的方法)
然后,只需使用此功能张贴
$ urltopost = $网址
该字段的信息$ datatopost = array($ name => $ value);
$ ch = curl_init($ urltopost);
curl_setopt($ ch,CURLOPT_POST,true);
curl_setopt($ ch,CURLOPT_POSTFIELDS,$ datatopost);
curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true);
$ returndata = htmlspecialchars(curl_exec($ ch));
为什么'htmlspecialchars()'?当OP仅需从表单中提取单个值时完全没有必要。页面数据不会在任何地方重新显示。 –
嗯,我总是使用它,因为那时我无法立刻用立陶宛字母做记号。 – aemdy
在这种情况下应该使用mb_strpos(),它可以识别多个字节并使用UTF字符串。 –
在http头文件中必须有东西来告诉密钥是否是有效的/过期的,也许你试图调查它,一旦你有正确的头部,你可以在手动抓取密钥或解析后发送请求curl的HTML结果。 – w00d