PHP,cURL发布到WordPress的帖子

mmu*_*iff 16 php wordpress curl

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

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

$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;
Run Code Online (Sandbox Code Playgroud)

这很好用.它让我很棒.

问题是我相信WordPress关键字的URL.

为了详细说明,我的握手页面(登录我)位于"blog"目录中,而我的WordPress应用程序位于"wordpress"目录中,该目录位于"blog"目录中.浏览器中的URL说..blog/handshake.php.但是,它在浏览器窗口中有WordPress的Admin部分.WordPress管理链接现在无法正常运行,因为当URL需要位于../blog目录中时,URL 位于..blog/wordpress/wp-admin目录中.

cURL中是否有一种方法可以使浏览器中的URL反映实际页面?

我应该使用FSockOPen吗?

Sko*_*one 13

Kalium得到了正确的结果 - WordPress界面中的路径是相对的,导致管理界面在以这种方式访问​​时无法正常工作.

你的方法在某些方面有所涉及,所以我想提出一些快速建议.

首先,我会尝试找到一种方法来删除$username$password变量的硬编码.想想破解是多么容易 - 例如,如果密码是通过管理界面更新的,那么代码中的硬编码值将不再正确,并且您的"自动登录"现在将失败.此外,如果某人以某种方式组成该网站并获得访问权限handshake.php- 那么,现在他们已经获得了您博客的用户名和密码.

看起来您的WordPress安装与您编​​写的握手脚本位于同一服务器上,因为路径/blog是相对的(在您的示例代码中).因此,我建议尝试模仿他们在父应用程序登录中验证的会话.我过去曾多次这样做 - 只是不记得具体细节.因此,例如,您的登录脚本不仅会设置您的登录凭据,还会设置WordPress身份验证所需的会话密钥.

这个过程将涉及挖掘很多WordPress的代码,但这就是开源之美!不要使用cURL和硬编码值,而是尝试将WordPress的身份验证机制简单地集成到应用程序的登录机制中.我首先看一下来源wp-login.php并从那里开始.

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

首先,添加以下curl_opt:

curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);  // Enables session support
Run Code Online (Sandbox Code Playgroud)

然后,在关闭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();
Run Code Online (Sandbox Code Playgroud)

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

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