【发布时间】:2020-08-21 13:28:46
【问题描述】:
我在 Delphi XE3 中编写了一个函数来使用 TIdHTTP 从 Web 获取一些数据。它无法正确获得结果,但邮递员可以。使用浏览器也能正常返回数据。
有人可以帮忙吗?
procedure CreateHTTP(var vHTTP: TIdHTTP; var vSSL: TIdSSLIOHandlerSocketOpenSSL);
begin
vHTTP := TIdHTTP.Create(nil);
vSSL := TIdSSLIOHandlerSocketOpenSSL.Create(vHTTP);
vSSL.SSLOptions.Method := sslvTLSv1;
vSSL.SSLOptions.Mode := sslmClient;
vHTTP.ProtocolVersion := pv1_0;
vHTTP.HandleRedirects := True;
vHTTP.IOHandler := vSSL;
vHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36';
vHTTP.Request.ContentType := 'text/plain';
end;
function HttpGetData(vUrl: String): String;
var
lIdHttp: TIdHTTP;
lSSL: TIdSSLIOHandlerSocketOpenSSL;
lDataStream: TStringStream;
lCode: integer;
begin
Result :='';
CreateHTTP(lIdHttp, lSSL);
lDataStream := TStringStream.Create('', TEncoding.UTF8);
try
try
lIdHttp.Get(vUrl, lDataStream);
lCode := lIdHttp.ResponseCode;
Result := lDataStream.DataString;
except
on E: EIdHTTPProtocolException do
begin
lIdHttp.Disconnect;
end;
end;
finally
lIdHttp.Disconnect;
lDataStream.Free;
lSSL.Free;
lIdHttp.Free;
end;
end;
lData := HttpGetData('https://emh5.eastmoney.com/api/CaoPanBiDu/GetCaoPanBiDuPart1Get?fc=30023602&color=w');
【问题讨论】:
-
请包含请求失败并显示错误消息时发生的实际错误消息。否则,包括实际响应和预期响应(如果它们不同)。
-
您是否遇到了异常?如果是这样,它说明了什么?什么是
ResponseCode报告?为什么要使用TStringStream而不是使用返回String的Get()版本?您确定服务器以 UTF-8 格式发送数据吗? -
ResponseCode 是 200 ,没有出现异常,我也测试了 Unicode,ANSI,同样的结果
-
我指的是URL(emh5.eastmoney.com/api/CaoPanBiDu/…),其他的URL都可以,该URL在浏览器中也可以,但是在idhttp组件中无效。
-
您可以使用 TRESTRequest。我可以给你举个例子