我刚刚在Facebook上进行卷曲请求,如果遇到这个问题,我可以轻松继续进行所有工作。
我的卷曲代码
function curl($url, $data=null, $ua=null, $cookie=null){
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
if($data != null){
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
if($cookie != null){
curl_setopt($c, CURLOPT_COOKIE, $cookie);
}
if($ua != null){
curl_setopt($c, CURLOPT_USERAGENT, $ua);
}
$hmm = curl_exec($c);
curl_close($c);
return $hmm;
}
$ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0';
$data = curl('https://facebook.com/', 0, $ua, 0,); //$data stores the html response of Facebook.com
print_r($data);
所以从这段代码中我们得到了facebook.com的html响应,我遇到的问题是从html响应中获取了一些值 我需要获取值输入字段 您可以在此处查看视图源:-视图源:https://www.facebook.com 因此,请帮助我从第一种形式获取输入字段的值(表单id =“ login_form” action =“ https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=111 “ method =” post“ novalidate =” 1“ onsubmit =”“) 示例:-我需要从该字段中获取(输入类型=“ hidden” name =“ jazoest” value =“ 2691” autocomplete =“ off” /)名称和值,因此我需要回显jazoest,2691和其他输入字段,例如这个 我已经尝试过preg_match不能正常工作,并且我有一个与Dom相同的示例
将此代码与curl函数一起使用
$ua = 'Mozilla/4.0 (compatible; MSIE 5.0; S60/3.0 NokiaN73-1/2.0(2.0617.0.0.7) Profile/MIDP-2.0 Configuration/CLDC-1.1)';
$data = curl('https://m.facebook.com/', 0, $ua, 0,); //$data stores the html response of Facebook.com
print_r($data);
这是Facebook和useragent在此处使用的移动网址,这是在Dom的帮助下,我们可以使用以下代码获取输入字段
function parse_inputs($html) {
$dom = new DOMDocument;
@$dom->loadxml($html);
$inputs = $dom->getElementsByTagName('input');
return($inputs);
}
$inputs = parse_inputs($data);
$post_params = "";
foreach ($inputs as $input) {
$post_params .= $input->getAttribute('name') . '=' . urlencode($input->getAttribute('value')) . '&';
}
print_r($post_params);
从此代码中,我可以获取m.facebook.com的输入字段,但不能获取www.facebook.com的输入字段,请为我提供帮助,另一个有用的示例也请在此处进行检查:-https://github.com/jerry-riady/Script-auto-like-face/blob/master/update.php 预先感谢您提供所有答案。
答案 0 :(得分:1)
使用loadHTML
代替loadXML
应该可以(在本地测试):
替换:
@$dom->loadxml($html);
具有:
$dom->loadHTML($html);
此外,我建议不要使用以下行(在@
函数之外)使用以下行:
parse_inputs
这是使错误输出静音的更合适的方法(它们仍然可以通过libxml_use_internal_errors(true);
和/或libxml_get_last_error()
(source)使用。
答案 1 :(得分:0)
用户代理
Mozilla/4.0 (compatible; MSIE 5.0; S60/3.0 NokiaN73-1/2.0(2.0617.0.0.7) Profile/MIDP-2.0 Configuration/CLDC-1.1)
使facebook认为您是诺基亚手机,并尝试将您重定向到m.facebook.com,即使您的请求是https://www.facebook.com ..要解决此问题,也请使用桌面用户代理相反,例如
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
此代码:
<?php
declare(strict_types=1);
$ch=curl_init();
curl_setopt_array($ch,array(
CURLOPT_URL=>'https://www.facebook.com',
CURLOPT_USERAGENT=>'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0',//'libcurl/'.(curl_version()['version']).' PHP/'.PHP_VERSION,
CURLOPT_RETURNTRANSFER=>1,
));
$html=curl_exec($ch);
$domd=@DOMDocument::loadHTML($html);
$inputs=[];
foreach($domd->getElementsByTagName("input") as $input){
$inputs[$input->getAttribute("name")]=$input->getAttribute("value");
}
print_r($inputs);
提供以下输出:
$ php wtf4.php
Array
(
[jazoest] => 2747
[lsd] => AVpUepnL
[email] =>
[pass] =>
[] => Logg inn
[timezone] =>
[lgndim] =>
[lgnrnd] => 171046_tirL
[lgnjs] => n
[ab_test_data] =>
[locale] => nb_NO
[next] => https://www.facebook.com/
[login_source] => login_bluebar
[prefill_contact_point] =>
[prefill_source] =>
[prefill_type] =>
[firstname] =>
[lastname] =>
[reg_email__] =>
[reg_email_confirmation__] =>
[reg_second_contactpoint__] =>
[reg_passwd__] =>
[sex] => 2
[referrer] =>
[asked_to_login] => 0
[terms] => on
[ns] => 0
[ri] => a78c3ab6-0e06-e414-b463-452c92229760
[action_dialog_shown] =>
[contactpoint_label] => email_or_phone
[ignore] => reg_email_confirmation__|reg_second_contactpoint__
[reg_instance] => BrW7XFdd5CvG1L4FidZcVijt
[captcha_persist_data] => AZl2s6wFOpoQEyjGUhIQJW23Say7yoZA6QdqOYGsPdq52J_eXFWd6lVUIwsHSDDPDyK2dOdsaN8uh2HCO7nKrZawq0lN16Nq0w4qrl-IzIFK9QHic9uSo5kaElwzPLgLnLvRmswIUI_cfils5_0qrhOcCAghdy-wzJmamAi015ksnMSe6ZP3OQHf9l8Hcx1PqIbSK-vlKu9PWDUbSbtXT7o4NFM5jd3gAwPH2fVYhxtsc17DrOE5ABeZ_49j-WBNJNHEiiibndcI2iTVRt1QEMlzVDf5SNfSA0Ht7cbV9cA-u7DjTT8S40Wfw7xdmZ65dVpMR338xQuKuDZ2_sKKNousie9nKdono7COI51BFoHFFaKTq5ntNbaqNNxF3h1YBxE
[captcha_response] =>
)
顺便说一句,您可能会发现这个项目很有趣:https://github.com/divinity76/msgme