标题:只要idhttp.get百度和google都会出错,,超严重问题呀..
只看楼主
kissjetg
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-10-12
 问题点数:0 回复次数:9 
只要idhttp.get百度和google都会出错,,超严重问题呀..
首先上面的问题我前面发过一次,但是却不怎么准确。问题的发生是这样的,我昨天晚上写程序调用时是可以直接
代码:
url:=IdHTTP1.get('http://www.baidu.com');
memo1.text:=url;
就这么简短的一个代码,他既然报个connection closed Gracefully (温和的关闭连接)

为什么会这样呢?..原因又是什么....我只是很普通的get了一下百度。难道这也有罪吗?

然后通过网上搜索。却没有相关的资料(可能是找不到合适的键字)。。后来我通过抓包发现如果用ie打开的话他的数据是

由程序发出来的包是这样的
GET /s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=qwqw&pn=00&ver=0&cl=3 HTTP/1.1
Content-Type: text/html
Host: www.baidu.com
Accept: text/html, */*
User-Agent: Mozilla/3.0 (compatible; Indy Library)

而由ie发出来的包是这样的
GET /s?tn=sitehao123&ie=gb2312&bs=delphi+connection+closed+Gracefully&sr=&z=&cl=3&f=8&wd=delphi7+connection+closed+Gracefully&ct=0 HTTP/1.1
Accept: */*
Referer: http://www.baidu.com/s?tn=sitehao123&ct=0&ie=gb2312&bs=connection+closed+Gracefully&sr=&z=&cl=3&f=8&wd=delphi+connection+closed+Gracefully
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
Host: www.baidu.com
Connection: Keep-Alive
Cookie: BDSP=0b23fa9963d8f2d38d6c3f73ee48a713932731d0b0a7bc8f50ec5bfa513d269759ee3d6d55fbb2fb43166d224f4a20a4462309f790529822720e0cf3d7ca7bcb0a46f21fbe096b63f6246b600c338744ebf81a4c510fd9f9d72a6059252dd42a2b34cd15; BAIDUID=B367BAA704590335868C367B7E68691E:FG=1; BD_UTK_DVT=1; BDSTAT=b2ccfebc7b025d26ad13a192c66f14db46fd0166d0160924bf18972bd007f214

二者的包在大有不同呀。。是不是就是因为这样的原因造了不能直接get的问题呀。。请各位大师给点提示呀....代码应该怎么写呢
搜索更多相关主题的帖子: get google 百度 idhttp 都会 
2008-10-12 01:16
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
connection closed Gracefully 是正常的,直接try掉就可以了,因为连接已经断开,客户端尝试去获取数据 ,产生这个异常时上面有说明的。
      If this is a CLIENT
      -------------------
      The server side of this connection has disconnected normaly but your client has attempted
      to read or write to the connection. You should trap this error using a try..except.
      Please see the help file for possible further information.
2008-10-12 15:26
kissjetg
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-10-12
得分:0 
不明白楼主的指的是什么
2008-10-12 18:19
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
得分:0 
我猜一下吧,会不是会因为连接的地址不是具体地址,而是一个目录,在 HTTP 中有对默认页的转向,导致了这个问题呢
2008-10-12 22:34
kissjetg
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-10-12
得分:0 
代码写过~因为HTTP头没构造好。。其他的原因没有
2008-10-12 23:47
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
出现connection closed Gracefully 一般是屏蔽掉就是了。
  try
    IdHTTP1.Get('http://www.baidu.com');
  except

  end;
但是不知道百度为什么直接这样不行,google是可以的。
http头还需要加什么呢?
2008-10-13 11:18
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
晕,百度屏蔽了indy的客户端标识的 Mozilla/3.0 (compatible; Indy Library),把‘Indy Library’去掉就可以了,这时网站为了屏蔽垃圾流量做的。
try
    IdHTTP1.Request.UserAgent := '绷得你个绷得啊';
    aStr := IdHTTP1.Get('http://www.baidu.com');
  except

  end;

[[it] 本帖最后由 anthony634 于 2008-10-13 11:49 编辑 [/it]]
2008-10-13 11:26
kissjetg
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-10-12
得分:0 
到处都能看到你
2008-10-13 14:51
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
呵呵,最近几天空了一点逛论坛的机会才多了点。平时都很少来
2008-10-13 15:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-237719-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.726798 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved