带有Delphi的NMHTTP组件导致错误

时间:2014-06-12 12:16:48

标签: delphi http

经过几年的差距,我现在又开始使用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组件(看不见)添加的,所以我想知道如何纠正这种情况。

1 个答案:

答案 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组件的源代码,那么您就不走运了。该公司已不再营业。