大佬教程收集整理的这篇文章主要介绍了delphi – 为什么Indy Project HttpClient Get()会在一些在Web浏览器中正常工作的URL上提供代码500?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的示例代码.所需要的只是带有Indy组件的Delphi以及带有按钮和备忘录的表单.
procedure TForm1.button1Click(Sender: TObject); var httpCLIENT1: TIdhttp; begin try try httpCLIENT1 := TIdhttp.Create(nil); Memo1.Clear; with httpCLIENT1 do begin HandleRedirects := True; request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924 Epiphany/1.4.4 (Ubuntu)'; Memo1.Text := Get('http://www.laredoute.fr/vente-machine-a-coudre-bernette-20-kit-couture--garantie-2-ans.aspx?productid=401225048&documentid=999999&categoryid=22918417&customertarget=0&offertype=0&prodcolor=1#pos=33_n_n_n_n_n_n&numberpage=2'); Caption := ResponseText; end; except On e: Exception do begin Memo1.Lines.Add('Exception: '+e.messagE); end; end; finally httpCLIENT1.Free; end; end;
这不是我身边的连接问题,因为99%的URL返回200或404,只有少数返回500,但每个浏览器都会在一秒钟内打开它们.
更新:我看到的情况是,当webbrowser请求URL时,服务器立即发回200响应,但是当TIdhttp请求URL时,服务器将301重定向发送到新URL,然后新的URL发送302重定向到TIdhttp请求该URL时的错误页面,然后在TIdhttp请求该URL时发送500响应.
Web浏览器请求与对Web服务器有影响的初始TIdhttp请求之间的两个区别是:
>您使用TIdhttp请求的URL在末尾包含一个锚标记(#character =#pos = 33_n_n_n_n_n_n& numberpage = 2之后的所有内容),webbrowsers通常会删除它.锚点实际上不是URL的一部分.它们用于Web浏览器在定位从URL检索的数据中的点时使用.
>用户代理.某些Web服务器对不同的用户代理敏感,并且可以向不同类型的用户代理发送不同的响应.
当我从URL中删除锚点时,TIdhttp.Get()不再崩溃:
@H_362_4@memo1.Text := Get('http://www.laredoute.fr/vente-machine-a-coudre-bernette-20-kit-couture--garantie-2-ans.aspx?productid=401225048&documentid=999999&categoryid=22918417&customertarget=0&offertype=0&prodcolor=1');以上是大佬教程为你收集整理的delphi – 为什么Indy Project HttpClient Get()会在一些在Web浏览器中正常工作的URL上提供代码500?全部内容,希望文章能够帮你解决delphi – 为什么Indy Project HttpClient Get()会在一些在Web浏览器中正常工作的URL上提供代码500?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。