使用Poco庫編寫乙個簡單的http客戶端原理

2021-06-29 10:42:04 字數 2602 閱讀 9501



//使用給定的伺服器ip 和埠例項化乙個http客戶端類,但並沒建立連線.

//建立乙個請求類,但也沒有真正連線,

path

是請求的路徑,如果請求

那麼這時string path=/radapi10/userauth.htm

//建立乙個類接收返回的資料

//發起post請求,這時才真正開始建立連線,所是有可能會拋

poco::

exception

session.

sendrequest

(request);

//接收伺服器反回的資料

std::

istream

& rs = session.

receiveresponse

(response);

//取得返回響應碼及對應的解釋資訊如:200 ok/401 unauthorized:請求未經授

std::cout << response.

getstatus

() << 

" "<< response.

getreason

()<< std::

endl;

//把資料從伺服器響應的資料流裡讀取出來,這裡是定到顯示器,應該也可以寫到檔案或其它流,但沒有試過。

streamcopier

::copystream

(rs, std::cout);

//乙個完整的會話結束,如果沒有exception發生,所有session/request/response都可以迴圈使用。如果發生了則要呼叫 session.reset()關閉套按字。

//使用給定的伺服器ip 和埠例項化乙個http客戶端類,但並沒建立連線.

//建立乙個請求類,但也沒有真正連線,

path

是請求的路徑,如果請求

那麼這時string path=/radapi10/userauth.htm

//設定內容編碼,純文字格式,也可以設定為json,text/xml等

//設定內容的長度,mystr是我們要傳送的字串

request.setcontentlength( (int)mystr.length() );

//取得伺服器io流,傳送出去

std::

ostream

& send = 

session

.sendrequest

(request);

send <<

mystr

<<

flush

;//傳送出去

//取得伺服器返回的流,並讀出其中資料

std::istream& res = session.receiveresponse(response);//receiveresponse(...)返回乙個輸入流的引用,用法見下句

res.read(buffer,1024);//buffer為資料緩衝區

cout<

l post和get一樣,session,

request

和response都是可以迴圈使用的。 l 

注意:sendrequest

和receiveresponse才是真正連線伺服器,所以是有可能會拋

poco::

exception

l virtual

std::

ostream

& sendrequest(ht

tprequest

& request);

把http請求頭髮送到session指定的伺服器.httpclientsession會設定好主機名keep-alive屬性。返回的ostream直到receiveresponse()呼叫或者session銷毀前都是可用的。

l void

reset

();

重置會話session並且關閉socket,即使設定了長連線下一次請求(

sendrequest

)也會重新建立連線.

如果你想迴圈使用某個session,或者保持長連線,那麼在receiveresponse()和

sendrequest

()發生丟擲異常或相應的流不可用時請呼叫此函式。如果不再使用這個會話,可以不用管它。

編寫乙個簡單的shell

include include include include include include include include void getloginname void gethostname void getdir p printf s p int main char argv 32 char...

編寫乙個簡單的死鎖

public class dead lock1 class runnable1 implements runnable catch exception e class runnable2 implements runnable catch exception e obj1 和 obj2 都是屬於類的...

乙個簡單的makefile的編寫

標頭檔案 part.h cpp檔案 包含part.h part.cpp cpp檔案 包含part.h partmain.cpp makefile編寫如下 main partmain.o part.o g o main partmain.o part.o partmain.o partmain.cpp...