用VC编程实现网页中POST提交的功能,100分。PPP

vcbacker 2001-06-26 09:06:41
虽然前面有很多类似的讨论,但是结论我不是很清楚。
请各位帮忙给我解决一下。
用vc提交一下数据给cgi程序。
最好是用post。
...全文
277 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
格利高里 2001-06-27
  • 打赏
  • 举报
回复
CString szContent;
CAsyncSocket* pClient = new CAsyncSocket;
char *szContent = "POST /sms/sms.asp?txt=12345789"
n = pClient->Create();
n = pClient->Connect("192.168.10.10", 80);
Sleep(2000);
n = pClient->Send(szContent, strlen(*szContent));
do
{
Sleep(40);
if (i++ > 50) break;
n = pClient->Receive(rbuf, sizeof(rbuf));
} while (n <= 0);
pClient->Close();
delete pClient;
plato 2001-06-27
  • 打赏
  • 举报
回复
或者用Navigate2也可以,关键参数这两个:
headers = "Content-Type: application/x-www-form-urlencoded\r\n"

postdata = "lname=Doe&fname=John"

plato 2001-06-27
  • 打赏
  • 举报
回复
以前写过的VC程序不在手边,否则就贴出来了。
MSDN中有VB用wininet发Post的例子,你改造一下就可以了:
标题:

INFO: Header Required Posting HTML Form Encoded Data to ASP Page
plato 2001-06-27
  • 打赏
  • 举报
回复
先HttpOpenRequest得到hRequest,open参数指定"POST"

然后HttpAddRequestHeaders加入"Content-Type: application/x-www-form-urlencoded\r\n"

然后HttpSendRequest指定lpPostData诸如"lname=Doe&fname=John"

然后InternetReadFile循环

最后关闭所有的句炳,OK?
vcbacker 2001-06-27
  • 打赏
  • 举报
回复
举个例子,谢谢!
plato 2001-06-27
  • 打赏
  • 举报
回复
Posting Data to the Server
To post data to a server, the verb in the call to HttpOpenRequest must be either POST or PUT. The address of the buffer containing the POST data should then be passed to the lpOptional parameter in HttpSendRequest. The dwOptionalLength parameter should be set to the size of the data.

vcbacker 2001-06-27
  • 打赏
  • 举报
回复
用vc做这个怎么这么困难阿
Kevin_qing 2001-06-27
  • 打赏
  • 举报
回复
MSDN里面有,index :HttpOpenRequest()
vcbacker 2001-06-27
  • 打赏
  • 举报
回复
lpszHeader 这个参数应该怎么设定?

另:wininet怎么实现?能不能给一些代码
plato 2001-06-27
  • 打赏
  • 举报
回复
还是用wininet实现比较简单
Kevin_qing 2001-06-27
  • 打赏
  • 举报
回复
或者用wininet实现
vcbacker 2001-06-27
  • 打赏
  • 举报
回复
void Navigate2( LPCTSTR lpszURL, DWORD dwFlags, CByteArray& baPostedData, LPCTSTR lpszTargetFrameName = NULL, LPCTSTR lpszHeader = NULL );

能不能用这个?
lpvPostData
Data to send with the HTTP POST transaction. For example, the POST transaction is used to send data gathered by an HTML form. If this parameter does not specify any post data, Navigate2 issues an HTTP GET transaction. This parameter is ignored if URL is not an HTTP URL.
我想用这个,但是不知道到底怎么用?
Kevin_qing 2001-06-27
  • 打赏
  • 举报
回复

//char *data;
//char *pUrl;

//SOCKET s;
//s=socket(...);
//connect(s,...);

char request[4096];
_snprintf(request,4096,
"POST %s HTTP/1.0\r\n"
"Host: %s\r\n"
"Content-Length: %u\r\n"
"\r\n",
GetUrlPath(pUrl),
GetServer(pUrl),
strlen(data));

send(s,request,strlen(request),0);
send(s,data,strlen(data));//发送数据

recv(s,.......);//接收结果


vcbacker 2001-06-27
  • 打赏
  • 举报
回复
是客户端程序阿。
hello008 2001-06-26
  • 打赏
  • 举报
回复
搞反了,你说的是Client端程序?!
呵呵!
hello008 2001-06-26
  • 打赏
  • 举报
回复
哈哈,简单得很!
去www.programsalon.com查找upload,就可以找到asp上载控件的VC源码,里面有个处理request的方法:
#include <asptlb.h>
STDMETHODIMP CUploader::StartUpload(IUnknown *pIUnk)
{
// TODO: Add your implementation code here
IRequest* pIRequest; // asp提供的接口
HRESULT hr = pIUnk->QueryInterface(IID_IRequest, reinterpret_cast<LPVOID*>(&pIRequest));
......
HRESULT hr = pIRequest->get_TotalBytes(&m_lDataSize);
hr = pIRequest->BinaryRead(&varBytesToRead, &sarrayBytes);
....

如果觉得符合你的要求,100分至少也德分给我80分吧?
ssh_zy 2001-06-26
  • 打赏
  • 举报
回复
建议:用TSOCKSPY32看POST发的数据,然后照抄一遍试试(注意结束的13h 和 10h)
vcbacker 2001-06-26
  • 打赏
  • 举报
回复
2001年6月26日22时21分53秒
vcbacker 2001-06-26
  • 打赏
  • 举报
回复
.
vcbacker 2001-06-26
  • 打赏
  • 举报
回复
需要用vc实现,难道不能模拟post吗?
加载更多回复(3)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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