C++太平洋网络ip地址查询接口如何使用

_Wanderer2199 2021-03-11 04:58:29
https://blog.csdn.net/lxw1844912514/article/details/100029418有点简洁..请教大佬们如何使用C++调用
...全文
1967 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
雷509 2021-04-23
  • 打赏
  • 举报
回复
_Wanderer2199 2021-03-24
  • 打赏
  • 举报
回复
read得到的结果 前面是一大片空白 我用getlength发现sdata是有数据的 长度227
zgl7903 2021-03-24
  • 打赏
  • 举报
回复
MyDbgPrintf 的 OutputDebugString 之前设置个断点, 查看 缓冲区变量是否正常, 再看上一级调用传递进来的参数是否对?
_Wanderer2199 2021-03-24
  • 打赏
  • 举报
回复
引用 17 楼 zgl7903 的回复:
setlocale(LC_ALL, "chs"); 这个是设置区域为简体中文,可以解决调试框中文输出乱码的问题,需要在OutputDebugString之前调用, 一般在App类构造时调用一次就可以 我测试的没有问题,试试下面代码,

#include <afxinet.h>

BOOL Test(LPCTSTR strURL, CString &szRecv)
{
  BOOL bRet = FALSE;

  szRecv.Empty();

  CInternetSession intsess;
  CHttpConnection *pHttpCon = NULL;
  CHttpFile *pHttpFile = NULL;

  DWORD dwSvrType = AFX_INET_SERVICE_UNK;
  CString strServer, strObject;
  INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
  CString strUsername, strPassword;
  if (AfxParseURLEx(strURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
    && dwSvrType == AFX_INET_SERVICE_HTTP)
  {
    try
    {
      //连接服务器
      pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
      //发送请求
      pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
      pHttpFile->SendRequest();
      //状态200
      DWORD dwStatCode = 0;
      if (pHttpFile->QueryInfoStatusCode(dwStatCode)
        && dwStatCode == HTTP_STATUS_OK)
      {
        CStringA sDataA;
        //读入数据
        while (1)
        {
          CHAR cData[1024 + 1];
          UINT uRd = pHttpFile->Read(cData, 1024);
          if (uRd == 0)
            break;

          cData[uRd] = 0;
          sDataA += cData;
        }

        //输出接收内容
        OutputDebugStringA(sDataA);
        OutputDebugStringA("\r\n");
        
#if (defined _UNICODE || defined UNICODE)
        //多字节转换到UNICODE
        int iWLen = MultiByteToWideChar(936, 0, sDataA, -1, NULL, 0);
        MultiByteToWideChar(936, 0, sDataA, -1, szRecv.GetBuffer(iWLen+1), iWLen);
#else //!UNICODE
        szRecv = sDataA; 
#endif //UNICODE

        bRet = TRUE;
      }
    }
    catch (CInternetException* e)
    {
      e->ReportError();
      e->Delete();
    }
  }


  if (pHttpFile)
  {
    pHttpFile->Close();
    delete pHttpFile;
    pHttpFile = NULL;
  }

  if (pHttpCon)
  {
    delete pHttpCon;
    pHttpCon = NULL;
  }

  intsess.Close();
  return bRet;
}


{
  setlocale(LC_ALL, "chs");

  CString szRecv;
  if(Test(_T("http://whois.pconline.com.cn/ipJson.jsp?ip=182.84.29.37"), szRecv))
  {
    TRACE(_T("%s\n"), (LPCTSTR)szRecv);
  }

}
噢我知道问题了,我的调试函数打印不出来读取的内容,这是为啥呢..
void MyDbgPrintf(const char* pszFormat, ...)
{
	//#ifdef _DEBUG
	char szBufFormat[0x1000];
	char szBufFormat_Game[0x1008] = "GameData:";
	va_list argList;
	va_start(argList, pszFormat);//参数列表初始化
	vsprintf_s(szBufFormat, pszFormat, argList);
	strcat_s(szBufFormat_Game, szBufFormat);
	OutputDebugString(szBufFormat_Game);
	va_end(argList);
	//#endif
}
zgl7903 2021-03-22
  • 打赏
  • 举报
回复
setlocale(LC_ALL, "chs"); 这个是设置区域为简体中文,可以解决调试框中文输出乱码的问题,需要在OutputDebugString之前调用, 一般在App类构造时调用一次就可以 我测试的没有问题,试试下面代码,

#include <afxinet.h>

BOOL Test(LPCTSTR strURL, CString &szRecv)
{
  BOOL bRet = FALSE;

  szRecv.Empty();

  CInternetSession intsess;
  CHttpConnection *pHttpCon = NULL;
  CHttpFile *pHttpFile = NULL;

  DWORD dwSvrType = AFX_INET_SERVICE_UNK;
  CString strServer, strObject;
  INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
  CString strUsername, strPassword;
  if (AfxParseURLEx(strURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
    && dwSvrType == AFX_INET_SERVICE_HTTP)
  {
    try
    {
      //连接服务器
      pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
      //发送请求
      pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
      pHttpFile->SendRequest();
      //状态200
      DWORD dwStatCode = 0;
      if (pHttpFile->QueryInfoStatusCode(dwStatCode)
        && dwStatCode == HTTP_STATUS_OK)
      {
        CStringA sDataA;
        //读入数据
        while (1)
        {
          CHAR cData[1024 + 1];
          UINT uRd = pHttpFile->Read(cData, 1024);
          if (uRd == 0)
            break;

          cData[uRd] = 0;
          sDataA += cData;
        }

        //输出接收内容
        OutputDebugStringA(sDataA);
        OutputDebugStringA("\r\n");
        
#if (defined _UNICODE || defined UNICODE)
        //多字节转换到UNICODE
        int iWLen = MultiByteToWideChar(936, 0, sDataA, -1, NULL, 0);
        MultiByteToWideChar(936, 0, sDataA, -1, szRecv.GetBuffer(iWLen+1), iWLen);
#else //!UNICODE
        szRecv = sDataA; 
#endif //UNICODE

        bRet = TRUE;
      }
    }
    catch (CInternetException* e)
    {
      e->ReportError();
      e->Delete();
    }
  }


  if (pHttpFile)
  {
    pHttpFile->Close();
    delete pHttpFile;
    pHttpFile = NULL;
  }

  if (pHttpCon)
  {
    delete pHttpCon;
    pHttpCon = NULL;
  }

  intsess.Close();
  return bRet;
}


{
  setlocale(LC_ALL, "chs");

  CString szRecv;
  if(Test(_T("http://whois.pconline.com.cn/ipJson.jsp?ip=182.84.29.37"), szRecv))
  {
    TRACE(_T("%s\n"), (LPCTSTR)szRecv);
  }

}
_Wanderer2199 2021-03-22
  • 打赏
  • 举报
回复
引用 15 楼 zgl7903 的回复:
[quote=引用 14 楼 _Wanderer2199 的回复:][quote=引用 13 楼 zgl7903的回复:]

Test(_T("http://whois.pconline.com.cn/ipJson.jsp?ip=59.54.49.72"))
我的调试输出 if(window.IPCallBack) {IPCallBack({"ip":"59.54.49.72","pro":"江西省","proCode":"360000","city":"九江市","cityCode":"360400","region":"","regionCode":"0","addr":"江西省九江市 电信","regionNames":"","err":""});}
我用新项目控制台也可以读取的,mfc里就不行了..[/quote] 我的就是MFC项目下测试的呢, 你的代码怎么写的? [/quote]

// CDialog_Tab1.cpp: 实现文件
#include <afxinet.h>
#include <locale.h>
void CDialog_Tab1::OnBnClickedBtnShowIpPosition()
{
	// TODO: 在此添加控件通知处理程序代码
	for (int index = 0; index < m_listRoomPlayer.GetItemCount(); index++)
	{
		char szIP[20] = { 0 };
		m_listRoomPlayer.GetItemText(index, 3, szIP, sizeof(szIP));
		if (strlen(szIP) != 0)
		{
			char szUrl[MAX_PATH] = { 0 };
			sprintf_s(szUrl, "http://whois.pconline.com.cn/ipJson.jsp?ip=%s", szIP);
			MyDbgPrintf("index:%d,szUrl:%s", index, szUrl);
			setlocale(LC_ALL, "chs");
			g_cMyRoom.GetRoomPlayerIPPosition(index, szUrl);
		}
	}
}

//CRoom.cpp:
#include <afxinet.h>
#include <locale.h>
BOOL CRoom::GetRoomPlayerIPPosition(DWORD dwIndex, char * szURL)
{
	CInternetSession intsess;
	CHttpConnection *pHttpCon = NULL;
	CHttpFile *pHttpFile = NULL;

	DWORD dwSvrType = AFX_INET_SERVICE_UNK;
	CString strServer, strObject;
	INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
	CString strUsername, strPassword;
	if (AfxParseURLEx(szURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
		&& dwSvrType == AFX_INET_SERVICE_HTTP)
	{
		try
		{
			//连接服务器
			pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
			MyDbgPrintf("pHttpCon:%x", pHttpCon);
			//发送请求
			pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
			MyDbgPrintf("pHttpFile:%x", pHttpFile);
			if (pHttpFile->SendRequest() == FALSE)
			{
				MyDbgPrintf("pHttpFile->SendRequest() == FALSE");
				return FALSE;
			}
			//状态200
			DWORD dwStatCode = 0;
			if (pHttpFile->QueryInfoStatusCode(dwStatCode)
				&& dwStatCode == HTTP_STATUS_OK)
			{
				CStringA sDataA;
				//读入数据
				while (1)
				{
					CHAR cData[1024 + 1];
					UINT uRd = pHttpFile->Read(cData, 1024);
					if (uRd == 0)
						break;

					cData[uRd] = 0;
					sDataA += cData;
				}
				
				//输出接收内容
				MyDbgPrintf("%s", (LPCTSTR)CString(sDataA));
				MyDbgPrintf("%s", sDataA.GetBuffer());
				/*MyDialog.m_DlgTab1.m_listRoomPlayer.SetItemText(dwIndex, 4, (LPCTSTR)CString(sDataA));*/
			}
		}
		catch (CInternetException* e)
		{
			e->ReportError();
			e->Delete();
		}
	}


	if (pHttpFile)
	{
		pHttpFile->Close();
		delete pHttpFile;
		pHttpFile = NULL;
	}

	if (pHttpCon)
	{
		delete pHttpCon;
		pHttpCon = NULL;
	}

	intsess.Close();
	return TRUE;
}
麻烦前辈指教啦!
zgl7903 2021-03-22
  • 打赏
  • 举报
回复
引用 14 楼 _Wanderer2199 的回复:
[quote=引用 13 楼 zgl7903的回复:]

Test(_T("http://whois.pconline.com.cn/ipJson.jsp?ip=59.54.49.72"))
我的调试输出 if(window.IPCallBack) {IPCallBack({"ip":"59.54.49.72","pro":"江西省","proCode":"360000","city":"九江市","cityCode":"360400","region":"","regionCode":"0","addr":"江西省九江市 电信","regionNames":"","err":""});}
我用新项目控制台也可以读取的,mfc里就不行了..[/quote] 我的就是MFC项目下测试的呢, 你的代码怎么写的?
_Wanderer2199 2021-03-20
  • 打赏
  • 举报
回复
引用 13 楼 zgl7903的回复:

Test(_T("http://whois.pconline.com.cn/ipJson.jsp?ip=59.54.49.72"))
我的调试输出 if(window.IPCallBack) {IPCallBack({"ip":"59.54.49.72","pro":"江西省","proCode":"360000","city":"九江市","cityCode":"360400","region":"","regionCode":"0","addr":"江西省九江市 电信","regionNames":"","err":""});}
我用新项目控制台也可以读取的,mfc里就不行了..
zgl7903 2021-03-20
  • 打赏
  • 举报
回复

Test(_T("http://whois.pconline.com.cn/ipJson.jsp?ip=59.54.49.72"))
我的调试输出 if(window.IPCallBack) {IPCallBack({"ip":"59.54.49.72","pro":"江西省","proCode":"360000","city":"九江市","cityCode":"360400","region":"","regionCode":"0","addr":"江西省九江市 电信","regionNames":"","err":""});}
_Wanderer2199 2021-03-20
  • 打赏
  • 举报
回复
引用 11 楼 zgl7903的回复:
什么叫read 读不到数据? 是没有执行到read 还是读取到的是空字符串? read 处设置断点,查看读到cData缓冲区的数据是?
执行到read 但读到空字符串
zgl7903 2021-03-19
  • 打赏
  • 举报
回复
什么叫read 读不到数据? 是没有执行到read 还是读取到的是空字符串? read 处设置断点,查看读到cData缓冲区的数据是?
_Wanderer2199 2021-03-19
  • 打赏
  • 举报
回复
引用 7 楼 zgl7903 的回复:
传递的参数对么? 设置断点调试下, 调试是程序员必备的基本功
前辈我调试之后发现前面都没问题,但read就是读不到数据,我新建一个控制台的空项目用前辈的代码可以读取,,论坛上搜read都是关于乱码的帖子..求助大佬
_Wanderer2199 2021-03-16
  • 打赏
  • 举报
回复
引用 7 楼 zgl7903 的回复:
传递的参数对么? 设置断点调试下, 调试是程序员必备的基本功
_Wanderer2199 2021-03-16
  • 打赏
  • 举报
回复
引用 7 楼 zgl7903 的回复:
传递的参数对么? 设置断点调试下, 调试是程序员必备的基本功
BOOL CRoom::GetRoomPlayerIPPosition(DWORD dwIndex, char * szURL)
{
	CInternetSession intsess;
	CHttpConnection *pHttpCon = NULL;
	CHttpFile *pHttpFile = NULL;

	DWORD dwSvrType = AFX_INET_SERVICE_UNK;
	CString strServer, strObject;
	INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
	CString strUsername, strPassword;
	if (AfxParseURLEx(szURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
		&& dwSvrType == AFX_INET_SERVICE_HTTP)
	{
		try
		{
			//连接服务器
			pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
			//发送请求
			pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
			pHttpFile->SendRequest();

			//状态200
			DWORD dwStatCode = 0;
			if (pHttpFile->QueryInfoStatusCode(dwStatCode)
				&& dwStatCode == HTTP_STATUS_OK)
			{
				CStringA sDataA;
				//读入数据
				while (1)
				{
					CHAR cData[1024 + 1];
					UINT uRd = pHttpFile->Read(cData, 1024);
					if (uRd == 0)
						break;

					cData[uRd] = 0;
					sDataA += cData;
				}
				
				//输出接收内容
				MyDbgPrintf("%s", (LPCTSTR)CString(sDataA));
				MyDbgPrintf("%s", sDataA.GetBuffer());
				/*MyDialog.m_DlgTab1.m_listRoomPlayer.SetItemText(dwIndex, 4, (LPCTSTR)CString(sDataA));*/
			}
		}
		catch (CInternetException* e)
		{
			e->ReportError();
			e->Delete();
		}
	}


	if (pHttpFile)
	{
		pHttpFile->Close();
		delete pHttpFile;
		pHttpFile = NULL;
	}

	if (pHttpCon)
	{
		delete pHttpCon;
		pHttpCon = NULL;
	}

	intsess.Close();
	return TRUE;
}
参数应该没问题 主要是前辈这段代码我看不懂..得麻烦前辈帮帮了!
zgl7903 2021-03-15
  • 打赏
  • 举报
回复
传递的参数对么? 设置断点调试下, 调试是程序员必备的基本功
_Wanderer2199 2021-03-15
  • 打赏
  • 举报
回复
引用 5 楼 zgl7903 的回复:
http://whois.pconline.com.cn/ipJson.jsp?ip=59.54.49.72 http://whois.pconline.com.cn 中有参数说明的
void CDialog_Tab1::OnBnClickedBtnShowIpPosition()
{
	// TODO: 在此添加控件通知处理程序代码
	for (int index = 0; index < m_listRoomPlayer.GetItemCount(); index++)
	{
		char szIP[20] = { 0 };
		m_listRoomPlayer.GetItemText(index, 3, szIP, sizeof(szIP));
		MyDbgPrintf("strlen(szIP):%u", strlen(szIP));
		if (strlen(szIP) != 0)
		{
			char szUrl[MAX_PATH] = { 0 };
			//sprintf_s(szUrl, "http://whois.pconline.com.cn/ipJson.jsp?ip=%s", szIP);
			sprintf_s(szUrl, "http://whois.pconline.com.cn/ipJson.jsp?json=true");
			setlocale(LC_ALL, "chs");
			g_cMyRoom.GetRoomPlayerIPPosition(index, szUrl);
		}
	}
}

BOOL CRoom::GetRoomPlayerIPPosition(DWORD dwIndex, char * szURL)
{
	CInternetSession intsess;
	CHttpConnection *pHttpCon = NULL;
	CHttpFile *pHttpFile = NULL;

	DWORD dwSvrType = AFX_INET_SERVICE_UNK;
	CString strServer, strObject;
	INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
	CString strUsername, strPassword;
	if (AfxParseURLEx(szURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
		&& dwSvrType == AFX_INET_SERVICE_HTTP)
	{
		try
		{
			//连接服务器
			pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
			//发送请求
			pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
			pHttpFile->SendRequest();

			//状态200
			DWORD dwStatCode = 0;
			if (pHttpFile->QueryInfoStatusCode(dwStatCode)
				&& dwStatCode == HTTP_STATUS_OK)
			{
				CStringA sDataA;
				//读入数据
				while (1)
				{
					CHAR cData[1024 + 1];
					UINT uRd = pHttpFile->Read(cData, 1024);
					if (uRd == 0)
						break;

					cData[uRd] = 0;
					sDataA += cData;
				}
				
				//输出接收内容
				MyDbgPrintf("%s", (LPCTSTR)CString(sDataA));
				MyDbgPrintf("%s", sDataA.GetBuffer());
				/*MyDialog.m_DlgTab1.m_listRoomPlayer.SetItemText(dwIndex, 4, (LPCTSTR)CString(sDataA));*/
			}
		}
		catch (CInternetException* e)
		{
			e->ReportError();
			e->Delete();
		}
	}


	if (pHttpFile)
	{
		pHttpFile->Close();
		delete pHttpFile;
		pHttpFile = NULL;
	}

	if (pHttpCon)
	{
		delete pHttpCon;
		pHttpCon = NULL;
	}

	intsess.Close();
	return TRUE;
}
请问前辈为什么读不到数据呢
zgl7903 2021-03-14
  • 打赏
  • 举报
回复
http://whois.pconline.com.cn/ipJson.jsp?ip=59.54.49.72 http://whois.pconline.com.cn 中有参数说明的
_Wanderer2199 2021-03-14
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:


#include <afxinet.h>

void Test(LPCTSTR strURL = _T("http://whois.pconline.com.cn/ipJson.jsp?json=true"))
{
  CInternetSession intsess; 
  CHttpConnection *pHttpCon = NULL;
  CHttpFile *pHttpFile = NULL;
    
  DWORD dwSvrType = AFX_INET_SERVICE_UNK;
  CString strServer, strObject;
  INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
  CString strUsername, strPassword;
  if(AfxParseURLEx(strURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
    && dwSvrType == AFX_INET_SERVICE_HTTP )
  {
    try
    {
      //连接服务器
      pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
      //发送请求
      pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
      pHttpFile->SendRequest();
       
      //状态200
      DWORD dwStatCode = 0;
      if(pHttpFile->QueryInfoStatusCode(dwStatCode)
        && dwStatCode == HTTP_STATUS_OK)
      {
        CStringA sDataA;
        //读入数据
        while(1)
        {
          CHAR cData[1024 + 1];
          UINT uRd = pHttpFile->Read(cData, 1024);
          if(uRd == 0)
            break;
 
          cData[uRd] = 0;
          sDataA += cData;
        }
 
        //输出接收内容
        TRACE(_T("%s\n"), (LPCTSTR)CString(sDataA));
      }
    }
    catch (CInternetException* e) 
    {
      e->ReportError();
      e->Delete();
    }
  }
 
 
  if(pHttpFile)
  {
    pHttpFile->Close();
    delete pHttpFile;
    pHttpFile = NULL;
  }
 
  if(pHttpCon)
  {
    delete pHttpCon;
    pHttpCon = NULL;
  }
 
  intsess.Close(); 
}

#include <locale.h>
//测试用例
{
  setlocale(LC_ALL, "chs");
  Test();
}

请教大佬 如果我想像这张图一样,已知IP,网页应该怎么写才能查对应的地址呢 这个网页是自己的地址
_Wanderer2199 2021-03-13
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903的回复:


#include <afxinet.h>

void Test(LPCTSTR strURL = _T("http://whois.pconline.com.cn/ipJson.jsp?json=true"))
{
  CInternetSession intsess; 
  CHttpConnection *pHttpCon = NULL;
  CHttpFile *pHttpFile = NULL;
    
  DWORD dwSvrType = AFX_INET_SERVICE_UNK;
  CString strServer, strObject;
  INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
  CString strUsername, strPassword;
  if(AfxParseURLEx(strURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
    && dwSvrType == AFX_INET_SERVICE_HTTP )
  {
    try
    {
      //连接服务器
      pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
      //发送请求
      pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
      pHttpFile->SendRequest();
       
      //状态200
      DWORD dwStatCode = 0;
      if(pHttpFile->QueryInfoStatusCode(dwStatCode)
        && dwStatCode == HTTP_STATUS_OK)
      {
        CStringA sDataA;
        //读入数据
        while(1)
        {
          CHAR cData[1024 + 1];
          UINT uRd = pHttpFile->Read(cData, 1024);
          if(uRd == 0)
            break;
 
          cData[uRd] = 0;
          sDataA += cData;
        }
 
        //输出接收内容
        TRACE(_T("%s\n"), (LPCTSTR)CString(sDataA));
      }
    }
    catch (CInternetException* e) 
    {
      e->ReportError();
      e->Delete();
    }
  }
 
 
  if(pHttpFile)
  {
    pHttpFile->Close();
    delete pHttpFile;
    pHttpFile = NULL;
  }
 
  if(pHttpCon)
  {
    delete pHttpCon;
    pHttpCon = NULL;
  }
 
  intsess.Close(); 
}

#include <locale.h>
//测试用例
{
  setlocale(LC_ALL, "chs");
  Test();
}

大佬出现了 我活了哈哈哈哈
zgl7903 2021-03-13
  • 打赏
  • 举报
回复


#include <afxinet.h>

void Test(LPCTSTR strURL = _T("http://whois.pconline.com.cn/ipJson.jsp?json=true"))
{
  CInternetSession intsess; 
  CHttpConnection *pHttpCon = NULL;
  CHttpFile *pHttpFile = NULL;
    
  DWORD dwSvrType = AFX_INET_SERVICE_UNK;
  CString strServer, strObject;
  INTERNET_PORT nPort = INTERNET_DEFAULT_HTTP_PORT;
  CString strUsername, strPassword;
  if(AfxParseURLEx(strURL, dwSvrType, strServer, strObject, nPort, strUsername, strPassword, 0)
    && dwSvrType == AFX_INET_SERVICE_HTTP )
  {
    try
    {
      //连接服务器
      pHttpCon = intsess.GetHttpConnection(strServer, nPort, strUsername, strPassword);
      //发送请求
      pHttpFile = pHttpCon->OpenRequest(NULL, strObject);
      pHttpFile->SendRequest();
       
      //状态200
      DWORD dwStatCode = 0;
      if(pHttpFile->QueryInfoStatusCode(dwStatCode)
        && dwStatCode == HTTP_STATUS_OK)
      {
        CStringA sDataA;
        //读入数据
        while(1)
        {
          CHAR cData[1024 + 1];
          UINT uRd = pHttpFile->Read(cData, 1024);
          if(uRd == 0)
            break;
 
          cData[uRd] = 0;
          sDataA += cData;
        }
 
        //输出接收内容
        TRACE(_T("%s\n"), (LPCTSTR)CString(sDataA));
      }
    }
    catch (CInternetException* e) 
    {
      e->ReportError();
      e->Delete();
    }
  }
 
 
  if(pHttpFile)
  {
    pHttpFile->Close();
    delete pHttpFile;
    pHttpFile = NULL;
  }
 
  if(pHttpCon)
  {
    delete pHttpCon;
    pHttpCon = NULL;
  }
 
  intsess.Close(); 
}

#include <locale.h>
//测试用例
{
  setlocale(LC_ALL, "chs");
  Test();
}

加载更多回复(1)

18,359

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧