Qt 自动HTTPS登录

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

我正在查看一个登录页面,我需要为它创建一条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.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">&nbsp;</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())
to
pNetMgr->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());