求CInternetSession使用post协议上传文件的实例代码

fengrx 2009-07-15 04:53:41
下载文件的代码已经能够实现,但上传文件测试了快一个小时了也没搞定呢,希望使用过的朋友提供下,谢谢!
...全文
2046 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxt13662250427 2012-10-18
  • 打赏
  • 举报
回复
我也遇到同样问题,不经过代理上传没问题,网上找了个CCProxy代理软件测试也没问题,但是到客户那的代理就不能上传,楼主解决了么?
qdfpll 2011-03-22
  • 打赏
  • 举报
回复
问题怎么解决的?
fengrx 2009-07-16
  • 打赏
  • 举报
回复
文件上传代码已经可以了,但还有一个问题,如果经过代理上传就不行,我的代理设置的代码如下:

char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
strcpy(strProxyList, "127.0.0.1:808");
strcpy(strUsername, "fengrongxing");
strcpy(strPassword, "123456");
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = strProxyList;
proxyinfo.lpszProxyBypass = NULL;
Session.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));

pHttpConnection = Session.GetHttpConnection(defServerName,nPort);
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, defObjectName);

pHttpFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, strUsername, strlen(strUsername)+1);
pHttpFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, strPassword, strlen(strPassword)+1);


大家知道是什么原因吗?
fengrx 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 oyljerry 的回复:]
pHttpFile->SendRequest(NULL, 0, strUsername, 12);
--- 返回什么错误..
[/Quote]

与服务器端的连接被重置。
lijiawlm 2009-07-15
  • 打赏
  • 举报
回复
我说的是 自然会有人 ....
我只做过POST 密码 获取返回登陆界面
没有上传过东西 不过 按道理来说 原理应该一样
lijiawlm 2009-07-15
  • 打赏
  • 举报
回复
呵呵 欣赏到了楼主的代码了!!!!! 保存之~
oyljerry 2009-07-15
  • 打赏
  • 举报
回复
pHttpFile->SendRequest(NULL, 0, strUsername, 12);
--- 返回什么错误..
fengrx 2009-07-15
  • 打赏
  • 举报
回复
//pHttpFile->SendRequest(FormDataType, strUsername, 12);
//pHttpFile->SendRequest(NULL, 0, strUsername, 12);
// pHttpFile->WriteString(strRequest);

这三种方式都不成功。

另外不知这样写代码对不对:
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/edocxj/UploadDoc.action?uploadToken=hpnGKdSLLm2jgC1Y4Qn7tYGQVJGcthB5bvX6lNMDx5zn2Hh0yQ9V!1478105473!1247646219515_1247646391015&proc=docInfo");
不清楚第二个参数具体是什么意思,
fengrx 2009-07-15
  • 打赏
  • 举报
回复
不清楚具体写文件这块代码应该怎么写,
我的代码:
if(pHttpFile->AddRequestHeaders(szHeaders))
{
//发送文件请求
//pHttpFile->SendRequestEx(strRequest.GetLength());
//if(pHttpFile->SendRequestEx(strRequest.GetLength()))
//{
//CString FormDataType = _T("Content-Type: application/x-www-form-urlencoded");
//pHttpFile->SendRequest(FormDataType, strUsername, 12);
//pHttpFile->SendRequest(NULL, 0, strUsername, 12);
// pHttpFile->WriteString(strRequest);
//pHttpFile->EndRequest();

//查询文件状态
if(pHttpFile->QueryInfoStatusCode(dwFileStatus))
{
//如果文件状态正常
if ((dwFileStatus/100)*100 == HTTP_STATUS_OK)
{
CString strLine;
DWORD dw ;

while (pHttpFile->ReadString(strLine)>0)
strHtml += strLine;

if(strHtml.Find("success",0)!=-1)
{
if (InternetQueryDataAvailable((HINTERNET)(*pHttpFile), &dw, 0, 0) && (dw == 0))
{
//设置成功标志
nSuccess = 0;
}
}
}
}
//}

oyljerry 2009-07-15
  • 打赏
  • 举报
回复
上传文件的代码出错的位置,什么错误信息,自己先调试一下
fengrx 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lijiawlm 的回复:]
你把下载的代码发出来让大家欣赏一下啊  自然就会有人无私的把上传文件代码发上来
[/Quote]

你现在把上传文件的代码帖出来吧,要遵守诺言啊,,
fengrx 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lijiawlm 的回复:]
你把下载的代码发出来让大家欣赏一下啊  自然就会有人无私的把上传文件代码发上来
[/Quote]

呵呵,,你是不是想看啊,

下载文件的核心代码:

DWORD WINAPI CDownLoadDlg::DownloadFileThread(LPVOID lpvoid)
{
CDownLoadDlg* pThis = (CDownLoadDlg *)lpvoid;
if(pThis == NULL) return 0;

CInternetSession aInternetSession; //一个会话
CHttpConnection* pHttpConnection = NULL; //链接
CHttpFile* pHttpFile = NULL;
const TCHAR szHeaders[] = _T("Accept: */*\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n"); //协议
DWORD dwFileStatus;
BYTE szBuffer[1024];
DWORD nLen;
CFile aFile;
DWORD nSuccess = -1;
CString strServer;
INTERNET_PORT nPort;
CString strObject;
DWORD dwServiceType;
DWORD dwDownloadSize = 0;
CString strLogs;

//分解URL
if(AfxParseURL(pThis->m_strURL, dwServiceType, strServer, strObject, nPort))
{
//如果服务类型是HTTP下载
if(dwServiceType != AFX_INET_SERVICE_HTTP && dwServiceType != AFX_INET_SERVICE_HTTPS)
{
//返回成功
return FALSE;
}
}

try
{
//建立http连接
char strProxyList[MAX_PATH], strUsername[64], strPassword[64];
strcpy(strProxyList, "127.0.0.1:808");
strcpy(strUsername, "fengrongxing");
strcpy(strPassword, "123456");
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = strProxyList;
proxyinfo.lpszProxyBypass = NULL;
aInternetSession.SetOption(INTERNET_OPTION_PROXY, (LPVOID)&proxyinfo, sizeof(INTERNET_PROXY_INFO));

pHttpConnection = aInternetSession.GetHttpConnection(strServer, nPort);
//如果失败则线程退出
if(pHttpConnection != NULL)
{
//取得HttpFile对象
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,
strObject,
NULL,
1,
NULL,
NULL,
INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE);
//如果失败则线程退出
if(pHttpFile != NULL)
{
pHttpFile->SetOption(INTERNET_OPTION_PROXY_USERNAME, strUsername, strlen(strUsername)+1);
pHttpFile->SetOption(INTERNET_OPTION_PROXY_PASSWORD, strPassword, strlen(strPassword)+1);

//增加请求头,如果失败
if(pHttpFile->AddRequestHeaders(szHeaders))
{
//发送文件请求
if(pHttpFile->SendRequest())
{
//查询文件状态
if(pHttpFile->QueryInfoStatusCode(dwFileStatus))
{
//如果文件状态正常
if ((dwFileStatus/100)*100 == HTTP_STATUS_OK)
{
//打开文件
if(aFile.Open(pThis->m_strFilePath, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary))
{

DWORD dwFileLen;
DWORD dwWordSize = sizeof(dwFileLen);
pHttpFile->QueryInfo(HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_CONTENT_LENGTH,
&dwFileLen,&dwWordSize,NULL);
pThis->m_ProgressCtrl.SetRange32(0, dwFileLen);
//接收数据
nLen = pHttpFile->Read(szBuffer, 1024);
//接收文件数据每次接收一个块
while(nLen >0 && !pThis->m_bExist)
{
//如果接收到数据
if(nLen > 0)
{
//写入文件
aFile.Write(szBuffer, nLen);

dwDownloadSize += nLen;

//SetFileProgress(dwDownloadSize);
pThis->m_ProgressCtrl.SetPos(dwDownloadSize);
}
//接收一个块的数据
nLen = pHttpFile->Read(szBuffer, 1024);
}
//如果接收到数据
if(nLen > 0)
{
//写入文件
aFile.Write(szBuffer, nLen);
dwDownloadSize += nLen;
pThis->m_ProgressCtrl.SetPos(dwDownloadSize);
}
else
{
DWORD dw ;
if (InternetQueryDataAvailable((HINTERNET)(*pHttpFile), &dw, 0, 0) && (dw == 0))
{
//设置成功标志
nSuccess = 0;
}
}
//关闭文件
aFile.Close();

AfxMessageBox("下载完成");
}
}
}
}
}
//删除http文件对象
delete pHttpFile;
}
//删除http连接对象
delete pHttpConnection;
}

//关闭http连接
aInternetSession.Close();
//返回
return nSuccess;

}
//异常处理
catch(CInternetException* e)
{
TCHAR szCause[MAX_PATH] = {0};
//取得错误信息
e->GetErrorMessage(szCause, MAX_PATH);
//错误信息写入日志
TRACE("internet exception:%s\n", szCause);
//删除异常对象
e->Delete();
//删除http文件对象
if(pHttpFile != NULL ) delete pHttpFile;
//删除http连接对象
if(pHttpConnection != NULL) delete pHttpConnection;
//关闭http连接
aInternetSession.Close();
//返回
return -1;
}
}
lijiawlm 2009-07-15
  • 打赏
  • 举报
回复
你把下载的代码发出来让大家欣赏一下啊 自然就会有人无私的把上传文件代码发上来

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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