【发布时间】:2020-01-21 19:38:22
【问题描述】:
浏览器示例
我有以下链接,可以使用 url 中的用户名和密码连接到我的 IP 摄像机。
http://admin:password@192.168.1.13/ISAPI/Streaming/channels/102/picture
如果我在 Internet Explorer 中打开此链接,它会显示以下消息并且无法打开该链接。
Windows can not locate <link>. Check your spelling and try again
当我在 Firefox 的 Chrome 中打开相同的链接时,它可以正常工作并显示所需的 jpg 图片。
德尔福
在delphi中,我使用TIdHttp从这个链接获取图片。
var
Ms: TMemoryStream;
PictureUrl: string;
begin
try
PictureUrl := 'http://admin:password@192.168.1.13/ISAPI/Streaming/channels/102/picture';
IdHTTP1.get(PictureUrl, MS);
Ms.Seek(0,soFromBeginning);
MS.SaveToFile('C:\Users\karat\Documents\hikivision1.jpg');
finally
FreeAndNil(MS);
end;
end;
该代码与另一个 jpg 图片链接一起工作,问题是该代码获得了一个 178 字节的 MemoryStream,这意味着该图片没有被加载。
我在表单中输入了TWebBrowser,我发现它给了我与 Internet Explorer 浏览器相同的错误,浏览器不支持加载这种类型的 url。
翻译:无法访问此页面。检查您的链接是否正确。
解决方案?
我假设如果我找到TIdHttp 像 Chrome 和 Firefox 一样的方式,它将正确加载所需的图片。有什么方法可以做到这一点或其他可能的解决方案?
【问题讨论】:
-
你说你正在接收 178 个字节,这些字节实际上是什么样的?请显示实际字节。我猜可能是错误的 HTML 页面而不是 JPG 图像,对吧?如果是这样,HTML 说明了什么?它可能为 URL 失败的原因提供了线索。
-
是的,没错。这就是我上传html错误图片的原因。这个白屏就是 HTML 错误。
-
该屏幕截图不是 Web 服务器提供给您的客户端的 HTML 页面。这是 IE 本身内置的错误页面,当它无法访问 URL 时会显示该页面。 Web 服务器实际上提供了什么?使用
TIdHTTP.Get()时,您的TMemoryStream实际接收的字节是多少?