C++ 以POST方式向网页提交数据.有错误。。求大神解救就这点财富值了,见谅。图片是错误。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 以POST方式向网页提交数据.有错误。。求大神解救就这点财富值了,见谅。图片是错误。相关的知识,希望对你有一定的参考价值。

#include "stdafx.h"#include <iostream>#include <string>#include <afxinet.h> //定义了MFC CInternetSession类等bool PostHttpPage(const std::string& hostName, const std::string& pathName, const std::string& postData) using namespace std; CInternetSession session(_T("session"),0,INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL,INTERNET_FLAG_DONT_CACHE); //设置不缓冲

INTERNET_PORT nPort = 80; DWORD dwRet = 0; CHttpConnection* pServer = session.GetHttpConnection( (LPCTSTR)hostName.c_str(),nPort); CHttpFile* pFile = pServer->OpenRequest((LPCTSTR)CHttpConnection:: HTTP_VERB_POST,(LPCTSTR)pathName.c_str()); CString strHeaders = "Content-Type: application/x-www-form-urlencoded"; //请求头//开始发送请求 pFile->SendRequest(strHeaders,(LPVOID)postData.c_str(), postData.size()); pFile->QueryInfoStatusCode(dwRet); if (dwRet == HTTP_STATUS_OK) CString result, newline; while(pFile->ReadString(newline)) //循环读取每行内容 result += newline+"\r\n"; std::cout<<result<<std::endl;//显示返回内容 else return false; delete pFile; delete pServer; cout<<"成功"<<endl; session.Close(); return true;int _tmain(int argc, _TCHAR* argv[]) using namespace std; int a; //向本机Web目录下面的welcome.php页面发送发送 PostHttpPage("localhost","welcome.php","name=rain&age=21"); cin>>a; return 0;

只帮你解决崩溃的问题哈


就说两个问题:

1、VS2005或以上的IDE默认是用UNICODE的,你代码里混用ANSI和UNICODE,又做强制转换,导致了一些参数出错


2、OpenRequest接受两种不同的参数的,既然你用的是HTTP_VERB_POST,为什么要强制转换成LPCTSTR呢,这样会导致它调用的是另外一个函数(C++支持同名函数,不同参数)


bool PostHttpPage(const std::wstring& hostName,
  const std::wstring& pathName,
  const std::wstring& postData)

using namespace std;
CInternetSession session(_T("session"),0,INTERNET_OPEN_TYPE_PRECONFIG,NULL,
NULL,INTERNET_FLAG_DONT_CACHE);     //设置不缓冲

INTERNET_PORT nPort = 80;
DWORD dwRet = 0;

CHttpConnection* pServer = session.GetHttpConnection(
(LPCTSTR)hostName.c_str(),nPort);
CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::
HTTP_VERB_POST,(LPCTSTR)pathName.c_str());

CString strHeaders = L"Content-Type: application/x-www-form-urlencoded"; //请求头
//开始发送请求

pFile->SendRequest(strHeaders,(LPVOID)postData.c_str(),
postData.size());
pFile->QueryInfoStatusCode(dwRet);

if (dwRet == HTTP_STATUS_OK)

CString result, newline;

while(pFile->ReadString(newline))
//循环读取每行内容
result += newline+L"\\r\\n";


std::cout<<result<<std::endl;//显示返回内容

else

return false;

delete pFile;
delete pServer;
cout<<"成功"<<endl;

session.Close();

return true;


//调用时用下面的代替
PostHttpPage(L"localhost",L"welcome.php",L"name=rain&age=21");

追问

那怎么改呢。我是个新手。这些代码大都是我从网上找的,只明白大概意思。对于这亏我还不熟悉。我把OpenRequest的强制转换去掉后。有这个。 1 IntelliSense: 没有与参数列表匹配的 重载函数 "CHttpConnection::OpenRequest" 实例。还有上面的session.GetHttpConnection也是。我怎么写这两个函数呢,?

追答

我不是贴了改好的代码给你了么……?

VS2005默认用的是UNICODE,即宽字节

参考技术A 能定位到异常是在哪里抛出的吗?追问

好像是session.GetHttpConnection pServer->OpenRequest(CHttpConnection HTTP_VERB_POST,(LPCTSTR)pathName.c_str());不对。您能看着改改么。

HTTP GET方式提交与POST方式提交

GET方式提交

1)地址栏(URI)会跟上参数数据,以?开始,多个参数之间以&分隔;

2)GET提交参数数据有限制,不超过1K;

3)GET方式不适合提交敏感信息,如密码;

4)浏览器默认直接访问的请求提交方式为GET。

POST方式提交

1) 参数不会跟在URI后面,参数是跟在请求实体内容中,没有以?开头,多个参数之间用&分隔;

2)POST提交的参数数据大小没有限制;

3) POST方式提交敏感数据,比GET安全。

以上是关于C++ 以POST方式向网页提交数据.有错误。。求大神解救就这点财富值了,见谅。图片是错误。的主要内容,如果未能解决你的问题,请参考以下文章

html如何向php中post数据

python 关于post和get的区别

页面请求方式都有哪些?分别有啥区别

在java中写jsp网页和servlet中,form表单的提交方法get与post的区别?

表单的开始和结束以啥为标志?表单的提交有几种方法,它们的区别是啥?

19、你知道的 HTTP 请求方式有几种(高薪常问)