c++ - Iwebbrowser2 导航 : No post-data submitted

标签 c++ post com iwebbrowser2

我正在使用 IWebbrowser2 接口(interface)来调用页面并向其提交一些 POST 数据。 IE 已打开,页面已调用,但不幸的是没有提交 POST 数据(PHP 服务器上的 $_POST 数组为空)。谁能告诉我为什么?

main方法中的相关部分:

BSTR bstrURL2;
bstrURL2 = SysAllocString(L"http://www.mypage.com/");

// Specify a binary Content-Type.
V_BSTR(&vHeaders) = SysAllocString(
  L"Content-Type: application/x-www-form-urlencoded\r\n" 
  L"Content-Encoding: UTF-8\r\n");

VARIANT vPostData = {0};
if (Navigate::GetPostData(&vPostData) == NOERROR)
r->Navigate(bstrURL2, &vFlags, &vEmpty, &vPostData, &vHeaders);

GetPostData 方法:

HRESULT Navigate::GetPostData(LPVARIANT pvPostData)
{
  HRESULT hr;
  LPSAFEARRAY psa;
  LPCTSTR cszPostData = "username=myusername&password=mypassword";
  UINT cElems;
  LPSTR pPostData;

  cElems = lstrlen(cszPostData);

  if (!pvPostData)
  {
    return E_POINTER;
  }

  VariantInit(pvPostData);

  psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
  if (!psa)
  {
    return E_OUTOFMEMORY;
  }

  hr = SafeArrayAccessData(psa, (LPVOID*)&pPostData);
  memcpy(pPostData, cszPostData, cElems);
  hr = SafeArrayUnaccessData(psa);

  V_VT(pvPostData) = VT_ARRAY | VT_UI1;
  V_ARRAY(pvPostData) = psa;
  return NOERROR;
}

最佳答案

我尝试重现您的示例,当我定义 vHeader 变量的类型时它起作用了:

// Specify a binary Content-Type.
V_VT(&vHeaders) = VT_BSTR;
V_BSTR(&vHeaders) = SysAllocString(L"Content-Type: application/x-www-form-urlencoded\r\nContent-Encoding: UTF-8\r\n");

参见此处:https://support.microsoft.com/en-us/kb/167658

关于c++ - Iwebbrowser2 导航 : No post-data submitted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775825/

相关文章:

c++ - 将二进制文件读入 Armadillo 矩阵的直接方法?

c++ - 具有子矩阵类的特征引用

Java - 使用 POST 上传文件到 URL,然后检索响应

javascript - 使用 Axios post 请求进行 JWT 授权

php - 如果 $_POST 是 "empty"或零,我如何检查 PHP?

c++ - 未能释放Direct3D Device "or"对应上下文

c++ - 如何让 C 风格的字符串函数工作?

c++ - dll 链接静态库 - 来自未使用函数的未解析链接器符号

c++ - CComModule::Unlock();

c++ - 动态创建的 Activex 控件的事件处理