Php 使用curl登录facebook

Php 使用curl登录facebook,php,curl,Php,Curl,我需要用curl登录facebook。我已经在浏览器中测试了条件禁用cookie、javascript和OperaMini4用户代理。它成功地登录了。有了它,我用inspect检查请求头和响应头中发生了什么。我已经查过了。第一步facebook将在隐藏类型输入lsd、jazoest、m_ts、li中生成4个随机值。post后的第二步将使用会话重定向到特定位置。因为,我禁用了cookie。所以我看到facebook切换到会话。在这一步之后。我应该看到我的时间轴页面。但是,这一切都没有发生。它只是发

我需要用curl登录facebook。我已经在浏览器中测试了条件禁用cookie、javascript和OperaMini4用户代理。它成功地登录了。有了它,我用inspect检查请求头和响应头中发生了什么。我已经查过了。第一步facebook将在隐藏类型输入lsd、jazoest、m_ts、li中生成4个随机值。post后的第二步将使用会话重定向到特定位置。因为,我禁用了cookie。所以我看到facebook切换到会话。在这一步之后。我应该看到我的时间轴页面。但是,这一切都没有发生。它只是发布到登录页面,没有跟踪位置。对象httpConnect是curl的包装器

$headers = [
        'User-agent: Opera/9.80 (J2ME/MIDP; Opera Mini/4.0.10992/35.5561; U; hr) Presto/2.8.119 Version/11.10',
    ];

$facebook = new httpConnect('https://m.facebook.com/');

$facebook->setHeaders($headers);

$facebook->setOptions();

$facebook->sendRequest();

$sourceCode = $facebook->getResponse();

preg_match('/<input type="hidden" name="lsd" value="(.*?)" autocomplete="off" \/>/', $sourceCode, $lsd);

preg_match('/<input type="hidden" name="jazoest" value="(.*?)" autocomplete="off" \/>/', $sourceCode, $jazoest);

preg_match('/<input type="hidden" name="m_ts" value="(.*?)" \/>/', $sourceCode, $m_ts);

preg_match('/<input type="hidden" name="li" value="(.*?)" \/>/', $sourceCode, $li);

$data = [
    'lsd' => $lsd[1],
    'jazoest' => $jazoest[1],
    'm_ts'  => $m_ts[1],
    'li' => $li[1],
    'try_number' => 0,
    'unrecognized_tries' => 0,
    'email' => 'email',
    'pass' => 'password',
    'login' => 'Log In',
    '_fb_noscript' => 'true'
];

$options = [
    CURLOPT_POST            => TRUE,
    CURLOPT_POSTFIELDS      => $data,
    CURLOPT_FOLLOWLOCATION  => TRUE,
];

$facebook = new httpConnect('https://m.facebook.com/login/device-based/regular/login/?refsrc=https%3A%2F%2Fm.facebook.com%2F&amp;lwv=100&amp;refid=8');

$facebook->setHeaders($headers);

$facebook->setOptions($options);

$facebook->sendRequest();

echo $facebook->getResponse();

您的登录代码甚至还没有完成

首先,第一个要求m.facebook.com获取原始cookie的请求需要使用accept language标头,它不会让你在没有accept language的情况下登录,奇怪的狗屎,这里是我使用的1:accept language:en US,en;q=0.8

第二,你试图用正则表达式解析HTML,你必须使用合适的HTML解析器,PHP包括DOMDocument,XMLReader,XMLParser,SimpleXml,…,第三,你试图硬编码登录表单参数,不要这样做,动态提取它们,您必须动态获取作为login_form元素的后代的所有元素,并将它们添加到您的登录请求中,只需填写电子邮件并手动传递输入


接下来,有时你会在登录后随机收到一个安装facebook移动应用程序的请求。这并不是每次都会发生,但似乎是随机的,当你收到这个问题时,你必须回答“是”或“否”,facebook将不允许你在回答之前继续登录。可以通过查找提供一些输出的

来检测问题。答案是什么?顺便问一下,你认为在没有cookie的情况下如何处理会话?@slepic我会在适当的条件下调试它。我禁用了浏览器cookie、javascript,最后我将原始用户代理更改为opera mini。成功登录。你确定你没有把苹果和梨混在一起吗?你在说什么浏览器?@slepic我的环境是windows。使用当前浏览器chrome 64位“我需要用curl登录facebook”-不,你不需要。这是明确不允许的,一旦Facebook发现你在做什么,他们就会封锁你的服务器IP。如果你需要在Facebook上以自动化的方式做任何事情,请使用他们的API。如果API不提供您想要的内容,那么这是不允许的。我更新了代码,但我坚持如何正确发布数据。看起来帖子的数据是空的。complete code@olivia不硬编码登录字段,它们一直在变化,从HTML动态获取它们。解析下的所有字段,并将它们添加到您的登录帖子中。此外,您的html解析代码也有错误,解析错误&;从现在开始,解决这个问题。我成功登录到facebook。我的最后一个问题是空的post值。我想我不知道;不需要动态解析html。因为,我的情况已经很好了。我请求老派的请求。都是静态的。全部切换到会话。否则,我将使用enable javascript请求。我禁用了所有功能,@olivia它确实有效,因为你很幸运,没有字符是用lsd编码的html。运行这个代码,你得到了什么?