VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 550|回复: 5

[求助] winhttp如何post发送文件内容

[复制链接]
20_avatar_middle
在线会员 祸起蛋炒饭 发表于 2017-12-3 14:36:39 | 显示全部楼层 |阅读模式
10驿站币
  1. CoInitialize(NULL);
  2.         IWinHttpRequestPtr pHttpReq;
  3.         HRESULT hr = pHttpReq.CreateInstance(__uuidof(WinHttpRequest));

  4.         HANDLE hFile = CreateFile(szFileName, 0, ....);
  5.         try
  6.         {
  7.                 pHttpReq->SetRequestHeader(_T("APP-Secret"), _T("arctk6q3auivo47npnlpw2b75zkellcb3w5yp7iq"));
  8.                 pHttpReq->SetRequestHeader(_T("Accept"), _T("application/json"));
  9.                 pHttpReq->SetRequestHeader(_T("Content-Type"), _T("application/json"));
  10.                 pHttpReq->SetRequestHeader(_T("Accept-Encoding"), _T("utf-8"));

  11.                 //specifies the individual time-out components of a send/receive operation, in milliseconds.
  12.                 pHttpReq->SetTimeouts(NULL, m_connTimeOut, 30000, m_receiveTimeOut);
  13.                
  14.                 char pData[4*1024*1024];
  15.                 ReadFile(hFile, pData, 4*1024*1024,0,0);               
  16.                 pHttpReq->Send(pData);
  17.                
  18.                 Get_WinHttp_RspString(pHttpReq, strReturn);
  19.                 closehandle(hFile);               
复制代码
我这样调用的使用  就是发不出去这个文件读取的数据   求各位大佬给指点个方法

最佳答案

查看完整内容

你既然发送的是二进制数据,就应该把 pData 转换成Send 认识的二进制数据 _variant_t 类型的变量。




上一篇:关于模态与非模态对话框创建和销毁
下一篇:textout

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2017-12-3 14:36:40 | 显示全部楼层
你既然发送的是二进制数据,就应该把 pData 转换成Send 认识的二进制数据 _variant_t 类型的变量。

  1. _variant_t varBlob = vtMissing;
  2. if (strMethod.CompareNoCase(_T("POST")) == 0 || strMethod.CompareNoCase(_T("PUT")) == 0)
  3. {
  4.         SAFEARRAY* psa = NULL;
  5.         SAFEARRAYBOUND rgsabound[1];
  6.         rgsabound[0].lLbound = 0;
  7.         rgsabound[0].cElements = nDataLen;
  8.         psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
  9.         for (long i = 0; i < (long)nDataLen; i++)
  10.                 SafeArrayPutElement(psa, &i, pBodyData++);

  11.         varBlob.vt = VT_ARRAY | VT_UI1;
  12.         varBlob.parray = psa;
  13. }

  14. hr = m_pHttpReq->Send(varBlob);
  15. if (FAILED(hr)) break;
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2017-12-3 23:38:47 | 显示全部楼层
楼主说的发不出去是什么意思?
用 fiddler 抓下你自己这个代码的包,看看发送什么出去了?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

20_avatar_middle
ico_lz  楼主| 祸起蛋炒饭 发表于 2017-12-4 09:32:25 | 显示全部楼层
Syc 发表于 2017-12-3 23:38
楼主说的发不出去是什么意思?
用 fiddler 抓下你自己这个代码的包,看看发送什么出去了?

老大 我这个不是在浏览器的,   主要是我发送的算是2进制数据,但是发送的时候 那个send的参数貌似是把数据当成字符串处理了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

20_avatar_middle
ico_lz  楼主| 祸起蛋炒饭 发表于 2017-12-4 12:16:07 | 显示全部楼层
Syc 发表于 2017-12-4 09:58
你既然发送的是二进制数据,就应该把 pData 转换成Send 认识的二进制数据 _variant_t 类型的变量。

多谢老大  我先去试试

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-17 05:51

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表