经过几年的差距,我现在又开始使用Delphi 5了。我的项目使用Netmaster NMHTTP组件下载文件。它曾经工作,但现在我收到以下错误: -
您的浏览器发送了此服务器无法理解的请求。
请求行包含协议字符串后面的无效字符。
以下代码使用String urlstext执行Get。
urlstext:= http://download.finance.yahoo.com/d/updatesec.csv?s= ^ NMX0530 + ^ NMX570 + ^ NMX1350'+ '+ ^ NMX1730 + NMX1750 + NMX1770 + NMX2350 + NMX2710 + NMX2720 + NMX2730 + NMX2750 + NMX2770 + ^ NMX2790 +'+ '^ NMX3350 + NMX3530 + NMX3570 + NMX3720 + NMX3760 + NMX3780 + ^ NMX4530 + ^ NMX4570 + ^ NMX5330 + ^ NMX5370 +'+ '^ NMX5550 + ^ NMX5750 + ^ NMX6530 + NMX6570 + NMX7530 + ^ NMX7570 + NMX8350 + ^ NMX8530 + ^ NMX8570 + ^ NMX8630 +'+ '^ NMX8670 + ^ NMX8770 + ^ NMX8980 + ^ NMX9530 + ^ NMX9570&安培; F = snl1c1p2急症=的.csv'
NMHTTP1Form := TNMHTTP1Form.Create(Self);
try
NMHTTP1Form.NMHTTP1.Get(urlstext);
except
beep;
nmhttp1form.NMHTTP1.RequestCloseSocket;
nmhttp1form.NMHTTP1.Cancel;
MessageStr := Format('%8s %8s %-s',[DateToStr(Date),TimeToStr(Now),'failure in goonline.download ' + OutputFileName]);
Form1.MessageMemo.Lines.Add(MessageStr);
EventLog(MessageStr);
Result := False;
end;
我通过Google发现了一个引用,即此错误意味着HTTP请求的HTTP版本错误。我认为这是由NMHTTP组件(看不见)添加的,所以我想知道如何纠正这种情况。
答案 0 :(得分:-1)
虽然不是严格的正确答案 -
解决方案#1
请考虑升级到最新的Delphi XE6并使用最新的Indy。
您遇到的问题是NMHTTP(NetMasters HTTP)实现了非常旧版本的HTTP协议,并且没有更新。
如果您仍在使用Delphi 5,请考虑使用Indy for Delphi 5:
http://www.indyproject.org/download/Files/Indy9.html
解决方案#2
NetMasters在没有源代码的情况下销售他们的NM(前缀:Net Masters)组件。假设你有源代码,你可以做一个hack,例如:将标头从HTTP 1.0更改为HTTP 1.1。
如果您没有NetMasters LLC Internet组件的源代码,那么您就不走运了。该公司已不再营业。