tc写好的编辑框为什么登录不了_抓取WordPress博客登录接口 编写博客登录程序

4ee829358494d6033b8e066ce1220efc.png
文章简介

WordPress是现在最受欢迎的博客系统。通过WordPress再配合模板,可以搭建出各式各样的网站。"断刀流技术博客"就是使用WordPress进行搭建的。今天主要是要讲解一下,如何通过代码 实现一个WordPress 博客登陆器。

aa7fca5dce37e0852e41f5a3f45d7358.png
抓取登录接口

为不侵害他人网站的权益,接下来的抓包以及登录;将用"断刀流技术博客"来进行演示。首先来到博客的登录界面,按F12调出控制台。随意输入一个账号和密码按登录按钮,就会抓取到一个向服务器以POST方式提交的数据包。

admin和admin888是随意添写的账号和密码,按照以下格式。只需要在 WordPress 博客登陆器 中,把账号和密码替换掉。在重新发送数据包就能实现登录了。

d2d3ef8f273a44c4eac541f973f7de1a.png
WordPress 博客登陆器界面设置

首先在界面上把登录框设计出来,接着在给账户和密码输入框添加绑定俩个变量(m_User,m_Paswd)。
其中m_Cookie这个变量是用于存,登录后网站返回的Cookie。m_Http的Spider类型的变量有点特殊,是"断刀流"封装的一个类。
里面定义了很多的函数,主要是为了方便和网站传递和接收数据。(稍后会给大家打包)

(开发语言:C++ 界面库:MFC 编程工具:Visual Studio)

CEdit m_User;
CEdit m_Paswd;
string m_Cookie;
Spider m_Http;

7d6355ef18c516eab24d5c138012c32b.png
给登录添加响应事件

双击Login这个按钮,Visual Studio会自动跳到代码界面,并且为你自动添加 按钮被单击 的消息处理函数。
在 OnBnClickedButton1()的消息处理函数中,添加如下的代码。这段代码 会首先获取 程序账号框和密码框的内容,然后在组装到要向网站提交的数据中。

最后对网站返回的响应头进行查找,通过查找后台特有字符来判断是否登录成功;如果登录成功就把网站返回的Cookie提取出来。完成这些步骤以后,就可以弹出一个提示框,告诉用户已经登录成功了。

void CWordPressLoginDlg::OnBnClickedButton1()
{
	CString  User, Paswd;
	m_User.GetWindowTextW(User);
	m_Paswd.GetWindowTextW(Paswd);
	if (User.IsEmpty())
	{
		MessageBox(L"小子! 请输入账号后在尝试!", L"账号登录", MB_OK | MB_ICONASTERISK);
		return;
	} if (Paswd.IsEmpty())
	{
		MessageBox(L"小子! 请输入密码后在尝试!", L"账号登录", MB_OK | MB_ICONASTERISK);
		return;
	}

	string CodeUser, CodePaswd, SendStr;

	//转换成string
	CodeUser = CW2A(User);
	CodePaswd = CW2A(Paswd);
	//UrlEncode编码
	CodeUser = m_Http.UrlEncode(CodeUser);
	CodePaswd = m_Http.UrlEncode(CodePaswd);
	//组装要向网站提交的数据,把账号和密码替换成编辑框内容
	SendStr = "log=" + CodeUser + "&pwd=" + CodePaswd + "&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=http%3A%2F%2Faddcmd.com%2Fwp-admin%2F&testcookie=1";


	CString strHead;
	//POST方式提交到以下的地址
	string Text = m_Http.PostRequest("http://addcmd.com/wp-login.php", SendStr);
	//对返回的网页内容进行编码转换
	CString ReturnText = m_Http.UTF82WCS(Text.c_str(), &strHead);


	CString Cookie, Cookie1, Cookie2;
	//查找响应头,是否还包含302状态码以及后台路径,如果存在说明登录成功
	if (strHead.Find(_T("HTTP/1.1 302 Found")) != -1 && strHead.Find(_T("/wp-admin/")) != -1)
	{

		//提取Coolie
		int begin = strHead.Find(_T("HttpOnly")) + strlen("HttpOnly");
		strHead = strHead.Mid(begin);
		Cookie1 = m_Http.GetTextMiddle(strHead, _T("Cookie: "), _T(";"));

		strHead = strHead.Mid(strHead.Find(_T("wp-admin")));
		Cookie2 = m_Http.GetTextMiddle(strHead, _T("Cookie: "), _T("; path"));

		Cookie.Format(_T("Cookie: %s; %s"), Cookie1, Cookie2);
		m_Cookie = CW2A(Cookie);
		MessageBox(L"恭喜你登录成功!", L"账号登录", MB_OK | MB_ICONASTERISK);
	}
	else
	{
		MessageBox(L"账号或密码错误!", L"账号登录", MB_OK | MB_ICONASTERISK);
	}

	// TODO:  在此添加控件通知处理程序代码
}
效果演示

界面没有美化看着怪别扭的,为了提升一下图片的逼格。特意运行了一下,之前写的一个博客后台管理程序。代码都是一样的代码,可以看到输入正确的账号密码后提示登录成功,反之则登录失败。

通过返回的Cookie就可以进行后台的操作了,Cookie就好比是你登录成功的一个证明。(界面美化请看《MFC窗口美化之背景自绘》这篇文章)

f35bf1a0a89ca549c356a625f4068898.png
请求头

之前抓到的包请求头都是很多参数的,为啥刚才在程序中提交数据时;都没看到请求头的踪影?难道只需要修改组装提交的数据就行了?
其实还是需要请求头的,不然网站服务器都识别不了提交过来的数据。

不知道你们还记不记得,在文章开头的时候;就定义了一个Spider类型的m_Http变量。因为像请求头之类的这些东西,都被我封装进去了。
需要访问网站时,只需要调用相关的函数就好了。(当然啦!有利就有弊,如果你想知道它的一个原理,那么就需要跟着代码一步一步走了)

85d4cb78b6a55a2dc130014d4d3a5189.png

本来想在文章结尾,把 Spider 这个类的文件打包给你们的。但是刚才在写代码的时候,还发现存在许多的问题。
看类的名字Spider(蜘蛛),就知道是用来写爬虫的。没错之前就是用来写爬虫的,硬是被我糊改乱改硬生生改过来的。里面的代码非常的乱,不容易阅读和理解。
改天有时间在封装一个专门用于Http访问的类,到时候在给你们打包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值