搞了N天的TidHttp的问题,大家帮忙啊~~搞不定了

gongzhen8287 2006-09-02 05:00:26
公司的考勤系统是内网中的一个网页,输入用户名和密码后进行上下班的登记。
于是,我想利用程序来实现这一步骤,具体代码(测试用)如下,用Memo中显示的
返回脚本代码来判断是否成功进行了登记。

如果用C++Builder6按照以下代码实现,执行后返回“用户名或者密码错误”的信息,
但是如果用Delphi7实现(把(2)代码段翻译一下),执行后是能正确登记的。
尝试升级了C++Builder6的Indy组件,可是问题依然。

现在肯请大家帮忙看看,看看问题出在什么地方,应该如何解决,先谢谢了~~~~

[代码]

TStringList *source = new TStringList();
TStringStream *response = new TStringStream("");

//(1)
IdHTTP1->Get("http://venus/xxoffice/ikq_sb.asp?id=gongzhen&password=1"),response);

//(2)
//source->Add("id=gongzhen");
//source->Add("password=1");
//IdHTTP1->Post("http://venus/xxoffice/ikq_sb.asp",source,response);

Memo1->Text = response->DataString ;
...全文
538 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯本 2006-09-07
  • 打赏
  • 举报
回复
(1)由于对方网页是用post得到数据的, 所以必须用post方法
(2)这个也是必须的,它的功能是告知WEB服务器获取客户端发送的文件的 MIME 内容类型
(3)&的功能是分隔变量
gongzhen8287 2006-09-02
  • 打赏
  • 举报
回复
经过测试以下代码是可行的:

TStringList *source = new TStringList();
TStringStream *response = new TStringStream("");

//IdHTTP1->Request->Accept="image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*";

IdHTTP1->Request->ContentType ="application/x-www-form-urlencoded";

//IdHTTP1->Request->Connection="keep-alive";
//IdHTTP1->Request->ContentLanguage="zh-cn";
//IdHTTP1->Request->ContentEncoding="gzip, deflate";
//IdHTTP1->Request->ContentLength=67;

source->Add("id=gongzhen&"); //?里加上&??
source->Add("password=1");
IdHTTP1->Post("http://venus/xxoffice/ikq_sb.asp",source,response);
Memo1->Text = response->DataString ;

也就是说错误有三点:
(1)Post->Get
其实,一开始我也是用Post方法,因为分析登陆页面代码的时候,看到的也是Post方法,但是
somebody说像这种提交只需要Get就可以了,Post用于更多数据的时候。

※像TidHttp中Post与Get方法,它们的使用的区别能给提示吗?

(2)IdHTTP1->Request->ContentType ="application/x-www-form-urlencoded";
这句没有加上。

※能不能解释一下这个属性的意思啊?

(3)source->Add("id=gongzhen&"); 这句没有加上&

※这个应该是CB6与D7的区别吧,在D7下是不用加的。

谢谢~~~
柯本 2006-09-02
  • 打赏
  • 举报
回复
首先,如果在D中(2)是可以的,那么说明你的网页是用的POST方法.(1)肯定是不可用的
这样试试:
TStringList *source = new TStringList();
TStringStream *response = new TStringStream("");
IdHTTP1->Request->Accept="image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*";
IdHTTP1->Request->ContentType ="application/x-www-form-urlencoded";
IdHTTP1->Request->Connection="keep-alive";
IdHTTP1->Request->ContentLanguage="zh-cn";
IdHTTP1->Request->ContentEncoding="gzip, deflate";
IdHTTP1->Request->ContentLength=67;
/////上面的再好写上
source->Add("id=gongzhen&"); //这里加上&试试
source->Add("password=1");
IdHTTP1->Post("http://venus/xxoffice/ikq_sb.asp",source,response);
Memo1->Text = response->DataString ;

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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