2011-08-24 84 views
0

我遇到了问题。 我想用CURL登录网站,但页面会生成一个密钥,该密钥位于隐藏字段中。所以我必须抓住隐藏领域的价值...之后,我必须提交密码,电子邮件和抓取密钥。CURL抓取信息并用它登录

这可能吗?

希望你明白

感谢

---- ----编辑如果 的页面重载,有一个在隐藏字段..和老的一个新的密钥不工作

+0

在http头文件中必须有东西来告诉密钥是否是有效的/过期的,也许你试图调查它,一旦你有正确的头部,你可以在手动抓取密钥或解析后发送请求curl的HTML结果。 – w00d

回答

0

是的。

  1. 将页面内容加载到变量中(例如$contents = file_get_contents(...);)。
  2. 现在,解析它,以便您可以获取隐藏的密钥(例如,$matches = preg_match(..., ...); $key = $matches[1];)。
  3. 现在,使用隐藏的密钥发布请求(例如,$context = streamcontextcreate(...); $data = file_get_contents(..., false, $context);)。
3

是的,这是可能的。基本步骤是:

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 
0

是的,这是可能的。

你甚至可以

$源抓取页面=用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));

+0

为什么'htmlspecialchars()'?当OP仅需从表单中提取单个值时完全没有必要。页面数据不会在任何地方重新显示。 –

+0

嗯,我总是使用它,因为那时我无法立刻用立陶宛字母做记号。 – aemdy

+0

在这种情况下应该使用mb_strpos(),它可以识别多个字节并使用UTF字符串。 –