Qt中使用QHttp連接網站伺服器,並傳遞參數(使用QHttp::request()函數實現) [POST/GET]

Qt中使用QHttp連接網站伺服器,並傳遞參數(使用QHttp::request()函數實現) [POST/GET]

 Qt中使用QHttp連接網站伺服器,並傳遞參數(使用QHttp::request()函數實現) [POST/GET]

 

資料來源: http://blog.chinaunix.net/uid-29044509-id-3817200.html

 

Qt裡提供QHttp實現Qt代碼與Http伺服器通信,提供GET、POST兩種發送請求的方式,做過網站的同學們應該知道,前者用於傳遞少量資料,而後者用於傳遞大量資料,多大呢?應該是大於1024個字元吧~比如100+KB或1MB+以上算是比較大了!

但是,如QHttp詳解所講,QHttp原生提供的get和post函數不能傳遞參數,只能單純的訪問頁面,不能向頁面傳遞參數,可以說功能是非常簡單的。

為了向伺服器傳遞參數,我知道的有兩種方式:

一、使用QNetworkAccessManager代替QHttp訪問http伺服器,QNetworkAccessManager是QHttp的一個更高層次的封裝,用起來非常簡單。可以參考Qt官網上的實例

二、堅持使用QHttp,但是要使用request函數發送http請求,而不是get或post函數。我這裡主要講下這種方法^_^

request函數需要一個QHttpRequestHeader,有的還需要一個QByteArray參數用於存放要向伺服器發送的參數,這倒不是主要的。主要的是這個QHttpRequestHeader怎麼設置!

直接上代碼:

1、使用GET方式,通過request函數向伺服器傳遞參數

QHttpRequestHeader header(“GET”, “/MyWebApp/MyJsp.jsp?code=1&account=10&pwd=12”);//需要傳遞的參數直接寫在path中 

header.setValue(“Host”, “127.0.0.1”);//必須設置主機IP或名字 

 

QHttp http; 

http.setHost(“127.0.0.1”,8080);//給QHttp設置主機IP和埠號 

int http_request_id=http.request(header);//發送請求 

 

http.close();//關閉請求,建議關上,因為close後,會flush輸出緩衝區~ 

 

2、使用POST方式,通過request函數向伺服器傳遞參數

QHttpRequestHeader header(“POST”, “/MyWebApp/MyJsp.jsp”);//只設置頁面的路徑path,待發送的參數不能寫在這裡! 

header.setValue(“Host”, “127.0.0.1”); 

header.setContentType(“application/x-www-form-urlencoded”);//必須設置! 

 

QHttp http; 

http.setHost(“127.0.0.1”,8080);//給QHttp設置主機IP和埠號 

int http_request_id=http.request(header,QString(“code=1&account=10&pwd=12”).toUtf8());//發送請求,注意,這裡要使用需要QByteArray參數的request函數重載版本,用於向伺服器發送參數 

 

http.close();//關閉請求,建議關上,因為close後,會flush輸出緩衝區~

好了,我們會發現,GET方式的參數是在頁面的path中摻雜出現的;而POST方式的參數是在QHttp::request()函數執行時單獨添加的,特別要注意的是,如果使用POST方式傳遞參數,一定要記得設置ContentType為“application/x-www-form-urlencoded”,否則伺服器端找不到這些參數!

 

 


 


One thought on “Qt中使用QHttp連接網站伺服器,並傳遞參數(使用QHttp::request()函數實現) [POST/GET]

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *