目录
大概思路
1、了解下股票API
2、写c socket 代码,加上http头,从服务端GET内容
1)获取服务器IP
2)获取头信息
IDE:code blocks
语言:c 语言
涉及内容:socket应用,TCP 添加http协议头访问http// 不想直接用http接口
大概思路
1、了解下股票API
用浏览器体验下,http://qt.gtimg.cn/q=sz000858,其中“000858”是五粮液股票代码;
2、写c socket 代码,加上http头,从服务端GET内容
1)获取服务器IP
ping qt.gtimg.cn 得知ip:101.227.162.124,http端口默认80
2) 获取头信息
Wireshark抓包,得知http头如下
完整代码如下:
#include#include #include #define SERVICE_IP "101.227.162.124" #define SERVICE_PORT 80 //获取简要信息: //http://qt.gtimg.cn/q=s_sz000858 //获取详细信息 //http://qt.gtimg.cn/q=sz000858 void get_current_price(char *src_buf,char *price_buf); void HideCursor(unsigned char Visible); int main() { int err = 0; WSADATA wsaData; SOCKET sock_fd; SOCKADDR_IN servaddr; char send_buff[1024]; char recv_buff[1024]; char price_buf[24]; const char *str = "gettime"; const char *serverip = SERVICE_IP; short port = SERVICE_PORT; int i = 0; //移动窗口位置,在桌面右上角 MoveWindow(FindWindow("ConsoleWindowClass",NULL),1096,0,1000,500,1); //设置窗口大小 system("mode con cols=18 lines=2"); //隐藏光标 HideCursor(1); WORD versionRequired=MAKEWORd(2,0); err = WSAStartup(versionRequired,&wsaData);//协议库的版本信息 if (err != 0) { printf("WSAStartup failed with error: %dn", err); return 1; } //检查Socket库的版本是否为2.0 if (LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 ) { WSACleanup(); return 1; } //printf("GetTickCount() :%ldrn",GetTickCount()); sock_fd = socket(PF_INET,SOCK_STREAM,0); if (INVALID_SOCKET == sock_fd ) { printf("socket errorrn"); return 1; } servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); servaddr.sin_addr.S_un.S_addr = inet_addr(serverip); printf("connecting...rn"); if (connect(sock_fd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == INVALID_SOCKET) { printf("connect failedrn"); return 1; } printf("connectedrn"); memset(send_buff,0,sizeof(send_buff)); strcpy(send_buff,"GET /q=sz000997 HTTP/1.1rnHost: qt.gtimg.cnrnConnection: keep-alivernCache-Control: max-age=0rnUpgrade-Insecure-Requests: 1rnUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36rnAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,* void get_current_price(char *src_buf,char *price_buf) { char *p1 = NULL; char *p2 = NULL; char *p3 = NULL; char *p4 = NULL; p1 = strstr(src_buf,"~"); if(p1) { p1++;//跳过~ p2 = strstr(p1,"~"); if(p2) { p2++;//跳过~ p3 = strstr(p2,"~"); if(p3) { p3++;//跳过~ p4 = strstr(p3,"~"); if(p4) { memcpy(price_buf,p3,p4-p3); price_buf[p4-p3] = ' '; } } } } else{ //printf("not foundn"); } } //隐藏光标 void HideCursor(unsigned char Visible) { CONSOLE_CURSOR_INFO Cursor; Cursor.bVisible = !Visible; Cursor.dwSize = sizeof(Cursor); HANDLE Hand = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(Hand, &Cursor); }



