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