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]”
QT String UTF8