DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 15
在线用户: 20
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 ti9er (TiGeR) ★☆☆☆☆ -
普通会员
2013/10/25 16:21:44
标题:
Clever Internet Suite使用环境问题 浏览:2112
加入我的收藏
楼主: 类似下面的代码 :

var
  post_response: TStringStream;
  HtmlParser: TStrings;
begin

  ...

  clHttpRequestInit;

  clHttpRequest.Header.Accept := 'image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*';
  clHttpRequest.Header.ContentType := 'application/x-www-form-urlencoded';
  clHttpRequest.Header.CacheControl := 'no-cache';

  clHttpRequest.AddFormField('pageNo', '1');
  clHttpRequest.AddFormField('total', '');
  clHttpRequest.AddFormField('SortField', '');
  clHttpRequest.AddFormField('SortType', 'abc');

  post_response := TStringStream.Create('', TEncoding.UTF8);
  HtmlParser := TStringList.Create ;

  clHttp.post(BaseURL + '/search.do?method=get',clHttpRequest, post_response);

  HtmlParser.Text := post_response.DataString;

  clHtmlParser.Parse(HtmlParser);
  clHtmlParser.links.AssignList(ListBox_ResponseLink.Items);

  ...
end

在XE3下可以从页面获取数据,但是在XE5下却取不到

环境分别为 :
XE3 + CIS 7.6
XE5 + CIS 7.8

7.8版本使用上有变化?或者出现新的bug?
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2013/10/26 12:15:01
1楼: 用抓包工具抓一下兩者發送的包有什麼不同就知道了,瞎猜很浪費時間的。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 ti9er (TiGeR) ★☆☆☆☆ -
普通会员
2013/10/27 9:21:57
2楼: 用HTTP Analyzer监控了一下,相同的header和postdata,与IE访问的区别为 :

ie8的是Content-Length:129 
cis的是Content-Length:120
----------------------------------------------
-
作者:
男 ti9er (TiGeR) ★☆☆☆☆ -
普通会员
2013/10/27 10:09:59
3楼: 用IE8和XE3+CIS 7.6,都可以返回数据库查询结果数据
CIS 7.8则是没有数据库查询结果的

CIS 7.8的TclHTTP新增了个SilentHTTP属性,设为true或false都没变化

而程序中另外一个模块也有类似的post查询数据库,则在7.6和7.8下都好使

实在是想不明白了
----------------------------------------------
-
作者:
男 ti9er (TiGeR) ★☆☆☆☆ -
普通会员
2013/11/13 0:03:18
4楼: 应该是编码的问题,其中有FormField为汉字,post后为GB2312编码的

clHttpRequest.AddFormField('Status', '待处理');

IE8为 : Status=%E5%BE%85%E5%A4%84%E7%90%86

pageNo=1&total=&SortField=&SortType=&PromTitle=&C1=&Status=%E5%BE%85%E5%A4%84%E7%90%86

CIS默认为 : Status=%B4%FD%B4%A6%C0%ED

pageNo=1&total=&SortField=&SortType=&PromTitle=&C1=&Status=%B4%FD%B4%A6%C0%ED

CIS使用HTTPEncode(AnsiToUtf8('待处理')),则为 : Status=%25E5%25BE%2585%25E5%25A4%2584%25E7%2590%2586 , 多了'25'

pageNo=1&total=&SortField=&SortType=&PromTitle=&C1=&Status=%25E5%25BE%2585%25E5%25A4%2584%25E7%2590%2586

应该如何转换,才能变成IE8的编码结果呢?
----------------------------------------------
-
作者:
男 ti9er (TiGeR) ★☆☆☆☆ -
普通会员
2013/11/13 9:31:35
5楼: 哪位大侠帮忙看看
----------------------------------------------
-
作者:
男 ti9er (TiGeR) ★☆☆☆☆ -
普通会员
2013/11/13 10:26:11
6楼: 解决了 :

clHttpRequest.Header.CharSet := 'UTF-8'; // 解决XE5下汉字编码成GB2312的问题

7.6之前是硬编码,之后是函数从这里获取的
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS