QT’de Tek Fonksiyon İçinde HTTP veya HTTPS Request-Response

http-request-response

Normalde QT’de bir linke HTTP request(istek) yapmanın en çok kullanılan şekli signal-slot yapısı ile yapılandır. Ancak bu ekstradan fazladan bir fonksiyon gerektirir ve sorguya verilen cevabı o fonksiyonda işleme zorunluluğu gibi kısıtlamalar getirir.

Bu yüzden bu yazıda C tipi arka arkaya işleyen kodlar ile tek bir fonksiyon içinde senkron bir HTTP request ve response işlemlerinin yapılmasından bahsedilecektir. Bu yöntem, QT’nin belki de en güzel özelliklerinden biri olan signal-slot yapısını ağlatır cinsten bir yöntem olacak ancak bazen senkron olmak yani cevabı beklemek gerekmektedir.

 

Bu tarz bir fonksiyonun temelini QEventLoop sınıfı oluşturmaktadır.  QEventLoop sınıfında çalışacak döngünün bitme koşulu, network işlemi başlamadan önce, connect() fonksiyonu sayesinde bir sinyalin (signal) tetiklenmesine bağlanır. Bu sayede belirlenen sinyal geldiğinde döngü sonlandırılır. Birbiri ile ilişkilendirme işlemi tamamlandıktan sonra http/https isteği yapılır ve QEventLoop sınıfındaki döngü çalıştırılmaya başlanır ve döngü bitme sinyali gerçekleşene kadar döngünün çalışması devam eder. Döngü sona erdikten sonra http/https cevabı okunur.

 


QString R_Selection_Facebook::doHttpRequest(QString link)
{

QEventLoop loop; QNetworkAccessManager *networkMgr = new QNetworkAccessManager(this); QNetworkRequest request;

request.setSslConfiguration( QSslConfiguration::defaultConfiguration() ); request.setUrl( QUrl(link) );

QNetworkReply *reply = networkMgr->get( request );

connect(reply,SIGNAL(sslErrors(QList<QSslError>)),reply,SLOT(ignoreSslErrors())); connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

// Event dongusunu calistir. Bu komut finished() sinyali tetiklenene kadar // kendi icinde donecek ve bu sinyal geldiginde donguden cikacak. loop.exec();

return QString(reply->readAll());

}

 

 

Https sorgusu yapabilmek için bazı ek ayarlamalar gerekmektedir. Bu ek ayarlamalar 39 ve 44. satırlarda yapılmıştır. Eğer https ile işiniz yoksa bu satırları silebilirsiniz.  Kodun QtCreator’den alınmış ekran görüntüsü ise aşağıdaki gibidir.

qt_tek_fonksiyon_http_https

1 Yorum

  1. Ömer   •  

    Gayet mantıklı, teşekkürler

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir