怎样在delphi中用http协议的post方法向remote host表格提交信息?(100分)

  • 主题发起人 主题发起人 netsong
  • 开始时间 开始时间
N

netsong

Unregistered / Unconfirmed
GUEST, unregistred user!
具体一点
 
很急呀,有那位大侠指点一二,小弟感激不尽
分数可以在加
 
“http协议的post方法”这句话好象有问题。
如果用TNMHTTP控件,看:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=249981
 
head信息,
url地址,
数据,如:"username=xxx&password=xxx"
 
就是
TNMTHHP.Post('http://.../.../xxx.exe','name1=...&name2=...&name3=...')
 
用的是NMHTTP控件的post方法,可是总返回空值,我是这样写的:
nmhttp1.post('http://127.0.0.1/test.asp','name=aaa&&password=bbb');
我的提交表单就这两项,在test.asp中让name和password显示,可返回的结果总是空

在字符串中,用一个&会出现下划线,而不是&
 
试一试 把 & 换成用数字表示的, 忘了怎么写了。
 
我用的是D5
 
在D5中应这样写:
nmhttp1.post('http://127.0.0.1/test.asp?name=aaa&password=bbb','');
返回结果就不为空了!
 
to shadowp: 这是get方法的格式呀
 
shadowp的方法服务器里面取参数和get一样,而且也受到get 一样的长度限制。

我一贯说nm的控件糟糕,这又是一例,
本来Post(...,'user=abc&password=def')
我发送出去的content中的内容就必须是user=abc&password=def
可是nmhttp自作聪明URLEncode了一把,把发送的内容变成了
user%3Dabc%26password%3Ddef
(就是说,把等号(=) encode 为 %3d ,把&变成 %26,画蛇添足)

我只好又推荐ics控件了:
http://www.rtfm.be/fpiette/indexuk.htm 免费软件、带源码。
post写起来麻烦一点,不过是有用的:

TMemoryStream* sendstr=new TMemoryStream();
TMemoryStream* rcvdstr=new TMemoryStream();
char buf[]="user=abc&password=xyz";
sendstr->Write(buf,sizeof(buf)-1);//减一是不要最后的/0字符
sendstr->Position=0;
h->RcvdStream=rcvdstr;
h->SendStream=sendstr;
h->URL="http://127.0.0.1/test.asp";
h->Post();
ShowMessage(AnsiString((char*)rcvdstr->Memory,rcvdstr->Size));

 
多人接受答案了。
 
后退
顶部