vc++ 实现http 哪种方案最好

vc++ 实现http 哪种方案最好,第1张

各有特点。以下是两个文件:HttpClient.h HttpClient.cpp 一个类

(错误检测部分没有加入)

使用方法

1:get方式

CHttpClient conn

CString value="http://8crystal.com/test.asp"

value=conn.doGet(value)

2:post方式

CHttpClient conn

CString value="http://8crystal.com/test.asp"

conn.addParam("name1","value1")

conn.addParam("name2","value2")

conn.addParam("name3","value3")

conn.addParam("name4","value4")

conn.addParam("name5","value5")

conn.addParam("name6","value6")

value=conn.doPost(value)

// HttpClient.h: interface for the CHttpClient class.

//

//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HTTPCLIENT_H__EA769DCB_AAB9_47CD_BD87_FBD6913592C5__INCLUDED_)

#define AFX_HTTPCLIENT_H__EA769DCB_AAB9_47CD_BD87_FBD6913592C5__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include "wininet.h"

#include "afxinet.h"

class CHttpClient

{

public:

void addParam(CString name,CString value)

CString doPost(CString href)

CString doGet(CString href)

CHttpClient()

virtual ~CHttpClient()

private:

CString CONTENT

int CL

CStringList values

CStringList names

}

#endif // !defined(AFX_HTTPCLIENT_H__EA769DCB_AAB9_47CD_BD87_FBD6913592C5__INCLUDED_)

++++++++++++++++++++++++++++++++++++++

// HttpClient.cpp: implementation of the CHttpClient class.

//

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "emailsenderv2.h"

#include "HttpClient.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__

#define new DEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CHttpClient::CHttpClient()

{

}

CHttpClient::~CHttpClient()

{

}

CString CHttpClient::doGet(CString href)

{

CString httpsource=""

CInternetSession session1(NULL,0)

CHttpFile* pHTTPFile=NULL

try{

pHTTPFile=(CHttpFile*)session1.OpenURL(href)

//session1.

}catch(CInternetException){

pHTTPFile=NULL

}

if(pHTTPFile)

{

CString text

for(int i=0pHTTPFile->ReadString(text)i++)

{

httpsource=httpsource+text+"rn"

}

pHTTPFile->Close()

delete pHTTPFile

}else

{

}

return httpsource

}

CString CHttpClient::doPost(CString href)

{

CString httpsource=""

CInternetSession session1

CHttpConnection* conn1=NULL

CHttpFile* pFile = NULL

CString strServerName

CString strObject

INTERNET_PORT nPort

DWORD dwServiceType

AfxParseURL((LPCTSTR)href,dwServiceType, strServerName, strObject, nPort)

DWORD retcode

char* outBuff = CONTENT.GetBuffer(1000)

try

{

conn1 = session1.GetHttpConnection(strServerName,nPort)

pFile = conn1->OpenRequest(0,strObject,NULL,1,NULL,"HTTP/1.1",INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_NO_AUTO_REDIRECT)

pFile -> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded")

pFile -> AddRequestHeaders("Accept: */*")

pFile -> SendRequest(NULL,0,outBuff,strlen(outBuff)+1)

pFile -> QueryInfoStatusCode(retcode)

}

catch (CInternetException * e){}

if(pFile)

{

CString text

for(int i=0pFile->ReadString(text)i++)

{

httpsource=httpsource+text+"rn"

}

pFile->Close()

}else

{

}

return httpsource

delete pFile

delete conn1

session1.Close()

}

void CHttpClient::addParam(CString name, CString value)

{

names.AddTail((LPCTSTR)name)

values.AddTail((LPCTSTR)value)

CString eq="="

CString an="&"

CONTENT=CONTENT+name+eq+value+an

CL=CONTENT.GetLength()

}

CHttpFile

CHttpConnection

CInternetSession

MFC中使用这个几个类来实现HTTP协议的数据传输。

具体使用方法看MSDN吧,网上搜索也能搜到例子,我就不贴代码了。

方法把指定JAR文件的全部内容装入到一个杂凑表(hashtable)中(杂凑表名可以从资源名进行访问)

init()是一个功能相当强大的方法,让我们来逐步理解它的功能。ZipFile类使我们基本上能访问JAR/Zip压缩文档的头部信息。

这和一个文件系统的目录信息相似。在这里我们列出Zip文件的所有条目(entry),并且按照文档中的每个资源的尺寸创建htSizes杂凑表(hashtable)。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/224550.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-08
下一篇2023-04-08

发表评论

登录后才能评论

评论列表(0条)

    保存