zoukankan      html  css  js  c++  java
  • C++之HTTP

    http请求大多包含在winhttp.h内,流程如下
    

    WinHttpOpen函数-返回winhttp-session句柄

    https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpopen
    
    WINHTTPAPI HINTERNET WinHttpOpen(
      LPCWSTR pszAgentW,
      DWORD   dwAccessType,
      LPCWSTR pszProxyW,
      LPCWSTR pszProxyBypassW,
      DWORD   dwFlags
    );
    
    pszAgentW:指向字符串变量的指针,包含调用WinHTTP函数的应用程序或实体的名称,用作用户代理
      
    dwAccessType:设置访问类型,其实就是各种代理的设置
      WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
    	WINHTTP_ACCESS_TYPE_NAMED_PROXY
    	WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY
    	WINHTTP_ACCESS_TYPE_NO_PROXY 不使用代理进行通讯
    
    pszProxyW:一个指针
      当dwAccessType=WINHTTP_ACCESS_TYPE_NAMED_PROXY,仅仅识别HTTP的CERN类型的代理
      当dwAccessType!=WINHTTP_ACCESS_TYPE_NAMED_PROXY,此处必须设置WINHTTP_NO_PROXY_NAME
    
    pszProxyBypassW:
      当dwAccessType=WINHTTP_ACCESS_TYPE_NAMED_PROXY时,指向不想走代理的IP地址或主机名
      当dwAccessType!=WINHTTP_ACCESS_TYPE_NAMED_PROXY,此处必须设置WINHTTP_NO_PROXY_BYPASS
    
    dwFlags:
      一般都为0
    

    WinHttpConnect函数--返回链接句柄

    
    
    WINHTTPAPI HINTERNET WinHttpConnect(
      HINTERNET     hSession,
      LPCWSTR       pswzServerName,
      INTERNET_PORT nServerPort,
      DWORD         dwReserved
    );
    
    hSession:先前在WinHttpOpen返回的句柄
    
    pswzServerName:指针,指向需要请求的服务器的IP或者主机名
      
    nServerPort:指向目标端口
      INTERNET_DEFAULT_HTTP_PORT  80
    	INTERNET_DEFAULT_HTTPS_PORT  443 
      INTERNET_DEFAULT_PORT  80&443
      
    dwReserved:保留参数,必须为0!
    

    WinHttpOpenRequest函数-创建http请求句柄

    https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpopenrequest
    
    WINHTTPAPI HINTERNET WinHttpOpenRequest(
      HINTERNET hConnect,
      LPCWSTR   pwszVerb,
      LPCWSTR   pwszObjectName,
      LPCWSTR   pwszVersion,
      LPCWSTR   pwszReferrer,
      LPCWSTR   *ppwszAcceptTypes,
      DWORD     dwFlags
    );
    
    hConnect:WinHttpConnect返回的句柄
      
    pwszVerb:指定要用的方法,如果未NULL则使用GET,此处方法必须全部为大写字母!
      
    pwszObjectName:资源名称,目标文件名
      
    pwszVersion:http版本,如果未NULL则使用HTTP /1.1
      
    pwszReferrer:常规使用设置WINHTTP_NO_REFERER即可
      
    ppwszAcceptTypes:指定客户端接受的媒体类型可设置WINHTTP_DEFAULT_ACCEPT_TYPES
     
    dwFlags:通常为0
    

    WinHttpAddRequestHeaders函数-设置http头

    https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpaddrequestheaders
    
    BOOLAPI WinHttpAddRequestHeaders(
      HINTERNET hRequest,
      LPCWSTR   lpszHeaders,
      DWORD     dwHeadersLength,
      DWORD     dwModifiers
    );
    
    hRequest:WinHttpOpenRequest返回的句柄
      
    lpszHeaders:包含了要附加到http请求上的头部信息,每个头部之间用 回车/换行 (CR/LF) 隔开
    
    dwHeadersLength:头部的长度
      
    dwModifiers:修饰作用,可以直接设定为WINHTTP_ADDREQ_FLAG_ADD
    

    WinHttpSendRequest函数-发送http请求

    BOOLAPI WinHttpSendRequest(
      HINTERNET hRequest,
      LPCWSTR   lpszHeaders,
      DWORD     dwHeadersLength,
      LPVOID    lpOptional,
      DWORD     dwOptionalLength,
      DWORD     dwTotalLength,
      DWORD_PTR dwContext
    );
    
    hRequest;WinHttpOpenRequest返回的句柄
    
    lpszHeaders:附加的http头,没有要附加的设置0即可,也可WINHTTP_NO_ADDITIONAL_HEADERS
    
    dwHeadersLength:指定头的字符串大小
      
    lpOptional:指向缓冲区的指针,包含要在请求标头之后立即发送的任何可选数据,常用于POST和PUT,如果没有要发送的可以设置为WINHTTP_NO_REQUEST_DATA
    
    dwOptionalLength:额外内容的长度
      
    dwTotalLength:总长度
      
    dwContext:通常为0
    

    WinHttpReceiveResponse函数-等待http回应

    WINHTTPAPI BOOL WinHttpReceiveResponse(
      HINTERNET hRequest,
      LPVOID    lpReserved
    );
    
    hRequest:WinHttpSendRequest返回的句柄
      
    lpReserved:保留参数设置NULL即可
      
    此处如果有回应则会返回TRUE 
    

    WinHttpQueryDataAvailable函数-返回http回应内容的信息

    BOOLAPI WinHttpQueryDataAvailable(
      HINTERNET hRequest,
      LPDWORD   lpdwNumberOfBytesAvailable
    );
    
    hRequest:返回WinHttpOpenRequest句柄,此处句柄调用WinHttpReceiveResponse
      
    lpdwNumberOfBytesAvailable:务必设置NULL,用来接收内容长度
    

    WinHttpReadData函数-获得http回应内容的信息

    BOOLAPI WinHttpReadData(
      HINTERNET hRequest,
      LPVOID    lpBuffer,
      DWORD     dwNumberOfBytesToRead,
      LPDWORD   lpdwNumberOfBytesRead
    );
    
    hRequest:返回WinHttpOpenRequest句柄
      
    lpBuffer:指定存放数据的缓存区
      
    dwNumberOfBytesToRead:缓存区大小长度
      
    lpdwNumberOfBytesRead:始终设置NULL即可
    
    联系邮箱:yang_s1r@163.com 博客园地址:https://www.cnblogs.com/Yang34/
  • 相关阅读:
    vanilla单词的意思
    快速排序实现
    python下载一些包出现time out的问题解决
    神经网络浅讲:从神经网络到深度学习
    神经网络基础知识
    TCP/IP
    查找机器学习相关数据集
    [数据治理]
    【算法】——LRU
    【大数据开发工程师】面试——HBase
  • 原文地址:https://www.cnblogs.com/Yang34/p/14398658.html
Copyright © 2011-2022 走看看