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++支持同名函数,不同参数)
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,即宽字节
好像是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方式向网页提交数据.有错误。。求大神解救就这点财富值了,见谅。图片是错误。的主要内容,如果未能解决你的问题,请参考以下文章
在java中写jsp网页和servlet中,form表单的提交方法get与post的区别?