栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

基于tcp实现http访问的简单例子,code blocks控制台c语言实现股票价格显示

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于tcp实现http访问的简单例子,code blocks控制台c语言实现股票价格显示

目录

大概思路

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);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920657.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号