CHttpConnection::OpenRequest 详解

转载 2012年03月30日 14:03:39

CHttpConnection::OpenRequest
CHttpFile* OpenRequest( LPCTSTR pstrVerb,
                        LPCTSTR pstrObjectname,
                        LPCTSTR pstrReferer = NULL,
                        DWORD dwContext = 1,
                        LPCTSTR* pstrAcceptTypes = NULL,
                        LPCTSTR pstrVersion = NULL,
                        DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT
                       );
CHttpFile* OpenRequest( int nVerb,
                        LPCTSTR pstrObjectName,
                        LPCTSTR pstrReferer = NULL,
                        DWORD dwContext = 1,
                        LPCTSTR* pstrAcceptTypes = NULL,
                        LPCTSTR pstrVersion = NULL,
                        DWORD dwFlags = INTERNET_FLAG_EXISTING_CONNECT
                       );
返回值:
一个指向所需的CHttpFile对象的指针。
参数:
pstrVerb  一个指向某个包含在请求中要用的动词的字符串指针。如果为NULL,则使用“GET”。  
pstrObjectName  一个指向某个包含特殊动词的目标对象的字符串的指针。通常为文件名称、可执行模块或者查找标识符。  
pstrReferer  一个指向指定了包含着所需的URL (pstrObjectName)的文档地址(URL)的指针。如果为NULL,则不指定HTTP头。  
dwContext  OpenRequest操作的上下文标识符。请参阅说明部分,以了解更多的关于dwContext的信息。  
pstrAcceptTypes  一个指向某空终止符的字符串的指针,该字符串表示客户接受的内容类型。如果该字符串为NULL,服务器认为客户接受“text/*”类型的文档 (也就是说,只有纯文本文档,并且不是图片或其它二进制文件)。内容类型与CGI变量CONTENT_TYPE相同,该变量确定了要查询的含有相关信息的数据的类型,如HTTP POST和PUT。  
pstrVersion  一个指向定义HTTP版本的字符串的指针。如果为NULL,则使用“HTTP/1.0”。dwFlags任意INTERNET_FLAG_*标记的组合。请参阅说明部分,以了解可能的dwFlags值的细节。  
nVerb  与HTTP请求类型有关的数字。可能为以下值之一: HTTP请求类型  nVerb值  
HTTP_VERB_POST  0  
HTTP_VERB_GET  1  
HTTP_VERB_HEAD  2  
HTTP_VERB_PUT  3  
HTTP_VERB_LINK  4  
HTTP_VERB_DELETE  5  
HTTP_VERB_UNLINK  6  
 
 
说明:
调用该成员函数,用以打开一个HTTP连接。
dwFlags可能为以下值之一:
Internet标记  描述  
INTERNET_FLAG_RELOAD  强行从资源服务器下载所需的文件、对象或路径列表,而不是从缓存中  
INTERNET_FLAG_DON'T_CACHE  不向缓存添加返回的实体  
INTERNET_FLAG_MAKE_PERSISTENT  将返回实体作为永久性实体添加到缓存中,这表示标准缓存清空,相容性检查或  
INTERNET_FLAG_SECURE  者垃圾回收都不能从缓存中移出该项使用安全事务语义。使用SSL/PCT的说明只在HTTP请求中才有意义  
INTERNET_FLAG_NO_AUTO_REDIRECT  只与HTTP一起使用,表示改变路径不能在CHttpFile::SendRequest中被自动处理 


覆盖dwContext 缺省值,为你所选的值设置一个上下文标识符。上下文标识符与用CInternetSession对象创建的CHttpConnection对象的指定的操作相关联。
该值被返回到CInternetSession::OnStatusCallback中,用以提供其所确定的操作状态。请参阅“Internet初步:WinInet”,以了解有关上下文标识符的更多信息。
上面部分是标准MSDN文档的描述
具体使用方法如下:
 CString strServerName,strObject,strURL="http://hi.baidu.com/5iprog/blog/item/eaaee4105b9ef06bcb80c464.html";
 DWORD dwFlags = INTERNET_FLAG_TRANSFER_BINARY;
 DWORD dwHttpRequestFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_TRANSFER_BINARY;
 DWORD dwServiceType;
 INTERNET_PORT nPort = INTERNET_INVALID_PORT_NUMBER;
 BOOL bResult =  AfxParseURL(strURL, dwServiceType, strServerName, strObject, nPort);
 if(!bResult)   
 {
  return FALSE;
 }
 CInternetSession session(theApp.m_pszAppName,(DWORD)this,PRE_CONFIG_INTERNET_ACCESS,NULL,NULL,INTERNET_FLAG_DONT_CACHE);
 CHttpConnection* pServer = session.GetHttpConnection( strServerName, dwFlags, nPort, NULL/*username*/,NULL/*password*/);
 CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject, NULL, (DWORD)this, (LPCTSTR*)_T("*/*\0"), NULL, dwHttpRequestFlags);
 
我在程序中刚开始设置接受类型为空,即
 CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject, NULL, (DWORD)this, NULL, NULL, dwHttpRequestFlags);
则上传文件时有时能上传完文件有时上传一部分后报InternetWriteFile Error.查看http服务器日志发现400错误,原因是默认的设定的是上传文本文件但是实际上我上传了二进制文件,服务器接收时不能解析,所以报400 (无效的请求头)然后终止上传了。



转帖:http://hi.baidu.com/5iprog/blog/item/4f83dbb00c1f3243092302e5.html

HTTP的OpenRequest方法

CHttpConnection::OpenRequest CHttpFile* OpenRequest( LPCTSTR pstrVerb, LPCTSTR pstrObjectname, LP...
  • glt3953
  • glt3953
  • 2013年07月19日 10:34
  • 6849

坑爹的WinInet函数之HttpOpenRequest HttpSendRequest

前几天领导让统计用户活跃量,想着加一个主动上报的进程,在服务启动的时候调用。 server端是一个页面 http://s.co.com/analysis.htm Clinet端访问的时候在后面加上参数...
  • xingfu0539
  • xingfu0539
  • 2015年06月02日 14:41
  • 2206

怎么用wininet中的OpenRequest?

http://www.cnblogs.com/devcjq/articles/2484798.html id="Topic_"想用发送request的方式在程序中获得网页的源代码 OpenRe...
  • tcm455090672
  • tcm455090672
  • 2015年04月01日 16:56
  • 232

CHttpConnection

1、构造一个CInternetSession的实例 CInternetSession*   pSession = new CinternetSession();//CInternetSession ...
  • pjl1119
  • pjl1119
  • 2013年01月23日 16:31
  • 2452

C++使用CHttpFile实现Http请求

C++使用CHttpFile实现Http请求
  • Haunt_
  • Haunt_
  • 2015年12月22日 11:13
  • 6136

VC连接HTTP服务器 & MFC 处理 HTTP 请求的基本方法

1.AfxParseURL函数,该函数解析URL字符串并返回服务的类型及组件,包含在 afxinet.h 头文件中。  BOOL AFXAPI AfxParseURL(LPCTSTR pstrURL...
  • shaderdx
  • shaderdx
  • 2014年06月04日 11:52
  • 4355

C++发送HTTP请求---亲测可行(转)

转自:http://hi.baidu.com/benbearlove/item/1671c23017575825b3c0c53f 环境:xp sp3,vs2008 #include #inclu...
  • dragoo1
  • dragoo1
  • 2012年07月29日 23:24
  • 30486

C++调用HTTP实现方式

Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,程序中使用POST方式, 提交数据并从服务器获取返回值。 为实现Http访问,微软提供了二套API...
  • love3s
  • love3s
  • 2012年09月03日 09:20
  • 13549

【开源】Https数据读取C++实现

一、基本实现           //HttpsData.h #include class CHttpsData { public: CHttpsData(); virtual ~CHttp...
  • sxyaxy
  • sxyaxy
  • 2014年03月05日 21:38
  • 6987

使用WinINet和WinHTTP实现Http访问

Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,在这个例程中我使用POST方式,提交数据value1与value2,并从服务器得到他们的和(value...
  • whatday
  • whatday
  • 2014年07月24日 21:46
  • 12880
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CHttpConnection::OpenRequest 详解
举报原因:
原因补充:

(最多只允许输入30个字)