1实现目标
已知自己的SVN账号密码,在QT中使用代码登陆SVN,可以下载需要的文件如ZIP压缩包
2 OpenSSL
QT 需要支持OpenSSL 网上有相关配置教程
3 关键代码
QNetworkAccessManager
m_NetManager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
connect(m_NetManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));//关联信号和槽
connect(m_NetManager,SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),this, SLOT(authRequiredReply(QNetworkReply*,QAuthenticator*)));
login(m_pConfig->mURL);
login
QNetworkReply * MainWindow::login(QString destUrl)
{
QNetworkRequest network_request;
//设置SSL,HTTPS协议需要SSL证书
QSslConfiguration m_sslConfig = QSslConfiguration::defaultConfiguration();
m_sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone);
m_sslConfig.setProtocol(QSsl::TlsV1_2);
network_request.setSslConfiguration(m_sslConfig);
network_request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
network_request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
//network_request.setHeader(QNetworkRequest::CookieHeader,var);
network_request.setUrl(QUrl(destUrl));
return m_NetManager->get(network_request);
//return m_NetManager->post(network_request,dataArray);
}
authRequiredReply
void MainWindow::authRequiredReply(QNetworkReply *reply, QAuthenticator *auth)
{
QString username = "your username";
QString password = "your password";
if (username.isEmpty() || password.isEmpty()) {
return ;
}
auth->setUser(username);
auth->setPassword(password);
}
4 效果
服务器反馈如下,说明已经登入成功
<!DOCTYPE html
PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<meta content="0;URL=/svn/" http-equiv="refresh" />
<title>VisualSVN Server</title>
</head>
<body>
<h1>Welcome to VisualSVN Server!</h1>
<p><a href="/svn/">Repositories</a></p>
</body>
</html>