Qt 自动HTTPS登录
我正在查看一个登录页面,我需要为它创建一条POST消息。这是登录页面的源代码Qt 自动HTTPS登录,qt,post,login,https,Qt,Post,Login,Https,我正在查看一个登录页面,我需要为它创建一条POST消息。这是登录页面的源代码 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title></title> <link rel="stylesheet" href="style.c
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<link rel="stylesheet" href="style.css" />
<script language="javascript" src="jquery.js"></script>
<script type="text/javascript" language="javascript">$(document).ready(function(){});</script>
</head>
<body style="background-color:#FFF; background-image:url(satellite.png); background-repeat:no-repeat; background-position:top center; max-width:100%;">
<div id="login" >
<form id="auth_user_sys" name="auth_user_sys" action="index.php" method="post">
<fieldset>
<legend>Authentication</legend>
<table>
<tr><td colspan="2"> </td></tr>
<tr><td><label>* Username </label></td><td><input id="user_sys" name="user_sys" type="text"/></td></tr>
<tr><td><label>* Password </label></td><td><input id="user_p_sys" name="user_p_sys" type="password"/></td></tr>
<tr><td colspan="2" align="center"><input id="btlog" name="btlog" type="submit" value="Connection"/></td></tr>
<tr><td colspan="2"></td></tr>
</table>
</fieldset>
</form>
</div>
</body>
</html>
我说它失败是因为对帖子的回复与对该URL的原始GET的回复相同,即登录页面的源。首先,QUrlQuery负责编码本身:
QString username = "aba";
QString password = "equals-sign:=amp:&nice";
QUrlQuery urlQuery;
urlQuery.addQueryItem("user_sys", username);
urlQuery.addQueryItem("user_p_sys", password);
QString params = urlQuery.query();
qDebug() << params;
我想知道您的代码中有哪些类型的username
和password
,因为toPercentEncoding()只存在于QByteArray和QUrl中。你需要qstring
其次,params.toLatin1()
已经返回一个QByteArray。将其转换为不规则的C风格指针并从那里返回QByteArray是没有意义的。追求
pNetMgr->post(request, params.toLatin1());
第三,您正在发送拉丁1编码的数据。您的用户名或密码中是否包含未包含的字符?我猜出来了。在认证部分有3个“输入名称”,但我只发送了2个。我添加了“btlog”项(见下文),它返回时带有一个设置cookie和一个指向我需要转到的页面的链接
QUrlQuery urlQuery;
urlQuery.addQueryItem("btlog", "Connection");
urlQuery.addQueryItem("user_sys", username);
urlQuery.addQueryItem("user_p_sys", password);
QString params = urlQuery.query();
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
request.setHeader(QNetworkRequest::ContentLengthHeader, params.length());
pNetMgr->post(request, params.toLatin1());
以哪种方式“失败”?您得到的是哪台服务器的响应?好问题!它失败了,因为我得到了一个回复,回复的HTML与我用简单的get得到的HTML相同。它基本上只是把我再次发送回登录页面。谢谢你的提示!用户名和密码确实是QbyteArray,我将它们更改为qString。密码中有一个“@”,但仅此而已。关于文章中可能遗漏的内容的任何其他想法。这些改变并不能让它工作……很好,这将是我接下来的两个猜测。让我补充两个提示:1。这是关于“输入名称”而不是“输入ID”。在您的示例中,它们匹配,但字段的键始终是“name”属性。2.您仍然需要对数据进行不必要的复制。更改
pNetMgr->post(请求,QByteArray(params.toLatin1())
topNetMgr->post(请求,参数toLatin1())代码>谢谢!我会修好的。
pNetMgr->post(request, params.toLatin1());
QUrlQuery urlQuery;
urlQuery.addQueryItem("btlog", "Connection");
urlQuery.addQueryItem("user_sys", username);
urlQuery.addQueryItem("user_p_sys", password);
QString params = urlQuery.query();
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
request.setHeader(QNetworkRequest::ContentLengthHeader, params.length());
pNetMgr->post(request, params.toLatin1());