中央論壇 - CENTER BBS
標題:
小小的httpget
[打印本頁]
作者:
f66666602
時間:
2007-7-27 20:51
標題:
小小的httpget
今天宿捨幾個突發奇想,希望在vim中輸入:q 關鍵字就直接可以進行google搜索。
本來用curl可以很簡便的處理這個問題的,可是為了熟悉下http協議,還是用socket寫了一個。
嗯,有個問題就是,還沒有對url進行轉義
#ifdef
HAVE_CONFIG_H
#include
<config.h>
#endif
#include
<iostream>
#include
<sstream>
#include
<string>
#include
<ace/OS.h>
#include
<ace/Log_Msg.h>
#include
<ace/INET_Addr.h>
#include
<ace/SOCK_Connector.h>
#include
<ace/SOCK_Stream.h>
#include
"guard.h"
int
main
(
int
argc
,
char
*
argv
[]){
setlocale(LC_ALL,
""
);
ACE
::init();
ACE_SOCK_Connector
conn
;
ACE_SOCK_Stream
peer
;
ACE_INET_Addr
peer_addr
;
if
(peer_addr.set(80,
"www.google.com"
) == -1)
ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT(
"解析域名失敗:%m"
)),-1);
if
(conn.connect(peer,peer_addr) == -1){
ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT(
"無法打開遠程連接:%m"
)),-1);
}
S_ON_BLOCK_EXIT_OBJ(peer,&
ACE_SOCK_Stream
::close);
std
::
ostringstream
oss
;
std
::
string
keyword
;
if
(argc<2)
keyword=
"snnn"
;
else
keyword=argv[1];
oss<<
"GET /search?q="
<<keyword<<
" HTTP/1.0\r\n"
"\r\n"
;
std
::
string
s
=oss.str();
const
ACE_Time_Value
timeout
(10);
if
(peer.send(s.c_str(),s.length(),0,&timeout) == -1)
ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT(
"%I發送請求失敗:%m\n%I請求的內容:%s\n"
),s.c_str()),-1);
while
(1){
char
buf
[20*1024];
ssize_t
n
=peer.recv(buf,
sizeof
(buf),0,&timeout);
if
(n<=0)
break
;
std
::cout<<
"new content"
<<
std
::endl;
std
::cout.write(buf,n);
if
(!memcmp(buf+n-7,
"\r\n0\r\n\r\n"
,7))
break
;
}
return
0;
}
歡迎光臨 中央論壇 - CENTER BBS (https://www.centerbbs.com/)
Powered by Discuz! X3