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

相关文章推荐

C++使用CHttpFile实现Http请求

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

CHttpConnection

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

vc http 使用CHttpConnection下载文件

此函数可支持下载几M以上文件 BOOL Download(CString strURL, CString strName, CString strSavePath) {     CInt...

HTTP的OpenRequest方法

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

坑爹的WinInet函数之HttpOpenRequest HttpSendRequest

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

MFC之HTTP post请求

一、建立会话(Session)对象:      CInternetSession mysession; 二、连接到Http服务器:       CHttpConnection *my...
  • ccfxue
  • ccfxue
  • 2016年04月29日 14:53
  • 1311

C++调用HTTP实现方式

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

HttpClient中头部Header的使用

今天看了几个使用HttpClient设置头部信息的帖子,发现使用的Header都是commons-httpclient包中的: import org.apache.commons.httpcli...
  • blue_jjw
  • blue_jjw
  • 2013年04月07日 17:16
  • 70194

HttpClient设置HTTP请求头Header

用Firebug对POST的数据进行监控 请求 HTTP头 信息,得到如下内容: Java代码   Accept  application/json, text/javascr...

使用CHttpConnection实现图片上传

void UploadPic(CString strPicName, CString strIP, int nPort, CString strRemote) { CInternetSession ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CHttpConnection::OpenRequest 详解
举报原因:
原因补充:

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