• 【C++】纯C++实现http打开网页下载内容的功能


    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    #include "Wininet.h"
    #pragma comment(lib,"Wininet.lib")
    
    using std::cout;
    using std::endl;
    
    //模拟浏览器发送HTTP请求函数
    std::string HttpRequest(char * lpHostName, short sPort, char * lpUrl, char * lpMethod, char * lpPostData, int nPostDataLen)
    {
    HINTERNET hInternet, hConnect, hRequest;
    
    BOOL bRet;
    
    std::string strResponse;
    
    hInternet = NULL;
    hConnect = NULL;
    hRequest = NULL;
    
    hInternet = (HINSTANCE)InternetOpen("User-Agent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (!hInternet)
    goto Ret0;
    
    hConnect = (HINSTANCE)InternetConnect(hInternet, lpHostName, sPort, NULL, "HTTP/1.1", INTERNET_SERVICE_HTTP, 0, 0);
    if (!hConnect)
    goto Ret0;
    
    hRequest = (HINSTANCE)HttpOpenRequest(hConnect, lpMethod, lpUrl, "HTTP/1.1", NULL, NULL, INTERNET_FLAG_RELOAD, 0);
    if (!hRequest)
    goto Ret0;
    
    //bRet = HttpAddRequestHeaders(hRequest,"Content-Type: application/x-www-form-urlencoded",Len(FORMHEADERS),HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
    //if(!bRet)
    //goto Ret0;
    
    bRet = HttpSendRequest(hRequest, NULL, 0, lpPostData, nPostDataLen);
    while (TRUE)
    {
    char cReadBuffer[4096];
    unsigned long lNumberOfBytesRead;
    bRet = InternetReadFile(hRequest, cReadBuffer, sizeof(cReadBuffer) - 1, &lNumberOfBytesRead);
    if (!bRet || !lNumberOfBytesRead)
    break;
    cReadBuffer[lNumberOfBytesRead] = 0;
    strResponse = strResponse + cReadBuffer;
    }
    
    Ret0:
    if (hRequest)
    InternetCloseHandle(hRequest);
    if (hConnect)
    InternetCloseHandle(hConnect);
    if (hInternet)
    InternetCloseHandle(hInternet);
    
    return strResponse;
    }

    这是一个函数,只要调用这个函数,就可以获取网页的内容

    调用方法

    int main()
    {
    	//CString strResponse = HttpRequest("translate.google.com",80,"/translate_t?langpair=en|zh-CN","POST","hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN",strlen("hl=zh-CN&ie=UTF-8&text=this is me&langpair=en|zh-CN"));
    	std::string strResponse = HttpRequest("www.qsxck.com", 80, "/", "GET", NULL, 0);
    	
    	//cout << strResponse.c_str();
    	
    	FILE * fp;
    	errno_t t =  fopen_s(&fp,"D:\old.html", "w");
    	
    	fwrite(strResponse.c_str(),1, strResponse.length(), fp);
    
    	fclose(fp);
    	getchar();
        return 0;
    }
    

      



  • 相关阅读:
    对Warning: Attempt to present XXX on XXX whose view is not in the window hierarchy!的解决方案
    iOS开发路线简述(转)
    Xcode6为什么干掉pch(Precompile Prefix Header)&如何添加pch文件
    ToolBar中的TextField为第一响应者时不弹出键盘
    xcode6 iOS SDK 8.1隐藏系统状态栏
    UE4 材质切换(带动画效果)
    UE4 VR 模式画面扭曲 解决方法
    UE4 去除不正确的水面倒影以及不完整镜头轮廓
    UE4 VR 模式全屏 4.13
    UE4 Windows平台部署游戏到IOS 第二部分
  • 原文地址:https://www.cnblogs.com/lujin49/p/9746539.html
Copyright © 2020-2023  润新知