代码之家  ›  专栏  ›  技术社区  ›  mmundiff

php,curl-post登录wordpress

  •  13
  • mmundiff  · 技术社区  · 17 年前

    我正在为一个需要从链接点击自动登录的客户机开发一个项目。

    我正在使用握手页使用以下代码进行此操作:

    $username = "admin";
    $password = "blog";
    $url = "http://wordpressblogURL/";
    $cookie = "cookie.txt";
    
    $postdata = "log=" . $username . "&pwd=" . $password . "&wp-submit=Log%20In&redirect_to=" . $url . "blog/wordpress/wp-admin/&testcookie=1";
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url . "blog/wordpress/wp-login.php");
    
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
    curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie);
    curl_setopt ($ch, CURLOPT_REFERER, $url . "blog/wordpress/wp-login.php");
    
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt ($ch, CURLOPT_POST, 1);
    $result = curl_exec ($ch);
    curl_close($ch);
    echo $result;
    
    exit;
    

    这个很好用。这让我很高兴。

    问题是我认为WordPress键不在URL中。

    更详细地说,我的握手页面(登录我的)在“blog”目录中,我的wordpress应用程序在“wordpress”目录中,该目录位于“blog”目录中。浏览器中的URL显示 ..blog/handshake.php . 但是,它在浏览器窗口中有wordpress的admin部分。WordPress管理链接现在不能正常工作,因为URL在 ../blog 当它需要在 ..blog/wordpress/wp-admin 目录。

    有办法进去吗 cURL 使浏览器中的URL反映实际页面?

    我应该改为使用fsockopen吗?

    4 回复  |  直到 10 年前
        1
  •  11
  •   Community Mohan Dere    10 年前

    Kalium说得对——WordPress接口中的路径是相对的,这导致了以这种方式访问时管理接口无法正常工作。

    你的方法涉及到一些方面,所以我想快速地提出一些建议。

    首先,我会想办法把 $username $password 变量的硬编码。想想这是多么容易被破坏——例如,如果通过管理界面更新密码,代码中的硬编码值将不再正确,而您的“自动登录”现在将失败。此外,如果有人以某种方式组成网站并获得访问权限 handshake.php --好吧,现在他们有了你博客的用户名和密码。

    看起来你的WordPress安装与你写的握手脚本在同一台服务器上,给出了 /blog 是相对的(在示例代码中)。因此,我建议您尝试在父应用程序登录中模拟它们验证的会话。我以前已经做过几次了——只是记不起细节。因此,例如,登录脚本不仅可以设置登录凭据,还可以设置WordPress身份验证所需的会话密钥。

    这个过程需要挖掘很多WordPress的代码,但这就是开源的好处!不要使用curl和硬编码值,尝试简单地将WordPress的身份验证机制集成到应用程序的登录机制中。我先看一下 wp-login.php 从那里出发。

    如果所有其他方法都失败了,并且您决定不尝试将会话身份验证机制与WordPress机制相结合,那么您可以立即通过对代码的这些更改来解决您的问题(而无需解决更多与方法有关的方面):

    首先,添加以下卷曲选项:

    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);  // Enables session support
    

    然后,在关闭curl处理程序后添加:

    curl_close($ch);
    // Instead of echoing the result, redirect to the administration interface, now that the valid, authenticated session has been established
    header('location: blog/wordpress/wp-admin/');
    die();
    

    因此,在这个不太理想的解决方案中,您将使用curl对用户进行身份验证,然后不再试图将管理界面劫持到当前页面,而是将它们重定向到常规管理界面。

    希望这有帮助!如果您需要更多帮助,请告诉我/解决方案不清楚。

        2
  •  1
  •   Kalium    17 年前

    检查HTML源代码。听起来wp的链接可能是相对的。但是,我建议您执行登录,将所需的cookie交给用户,并重定向它们,而不是使这个过程比以前更复杂。

    否则,您将逐个对代理进行编码。

        3
  •  1
  •   Chris Henry    17 年前

    如果脚本没有在一次执行中执行所需的所有功能,则可能需要解析cookie值,将其存储在文件中,然后在下一次执行时重新发送。查看Curlopt_Cookiefile选项。

        4
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    12 年前

    使用 Zend Framework's Cookies 为您管理它们。我过去曾用它来爬行网站的安全部分,使用 cURL .

    推荐文章