我正在为每个URL提供图像并显示TImage.我将使用JPG,GIF和PNG.但我不知道如何找出每个文件的扩展名,然后进行区分.我如何获得标题或任何其他方法让我知道什么类型的文件:GIF或PNG或JPG?
var
MS : TMemoryStream;
GIf: TGIFImage;
jpegimg: TJPEGImage;
begin
MS := TMemoryStream.Create;
GIf := TGIFImage.Create;
jpegimg := TJPEGImage.Create; ///////
try
try
IdHTTP1.get('http://forum.wmonline.com.br/uploads/av-8929.jpg',MS);
Ms.Seek(0,soFromBeginning);
//Gif.LoadFromStream(MS);
//Logo.Picture.Assign(GIF);
jpegimg.LoadFromStream(MS);
Logo.Picture.Assign(jpegimg);
except
ShowMessage('ERRO');
Exit;
end;
finally
FreeAndNil(GIF);
FreeAndNil(MS);
jpegimg.Free; ////
end;
Run Code Online (Sandbox Code Playgroud) 我需要帮助加速我的项目,我有2个ListBox,第一个是完整的URL,第二个我存储导致404错误的Listbox1的URL,它只是检查过程.idhttp需要大约2s来检查1个url,我不需要html,因为解密过程需要时间,所以我决定在我的项目中添加线程,到目前为止我的代码
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
IdSSLOpenSSL, Vcl.StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP;
type
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Button1: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
Button3: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
public
end;
Type
TMyThread = class(TThread)
IdHTTP1: TIdHTTP;
Button1: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
Button3: TButton;
Memo1: TMemo;
private
fStatusText : string;
lHTTP: TIdHTTP;
protected
procedure Execute; override;
public
Constructor Create(CreateSuspended : boolean); …Run Code Online (Sandbox Code Playgroud) 我正在使用Delphi XE8和Indy 10进行Android应用程序开发.我已经使用该TIdHTTP组件进行HTTP/S服务调用.
它在Android 5及更早版本中运行良好,但在Android 6.0中不起作用(当我尝试访问HTTPS协议时).
我尝试过TIdSSLIOHandlerSocketOpenSSL,但当我调用任何服务方法,如PUT,POST,GET时,应用程序仍然崩溃.
请帮帮我.
我在使用 Indy (Delphi) 的 IdHttp 中遇到问题。
我尝试使用 IdHttp 在 Web 服务 SOAP 中发布 XML,但不起作用。返回“使用 SSL 连接时出错。” 在来自 indy 的 IdSSLOpenSSL.Connect@1437 中。
我的代码很简单:
procedure TForm1.Button1Click(Sender: TObject);
var
vRequest : TStringStream;
s : String;
begin
vRequest := TStringStream.Create((Memo1.Lines.Text));
try
IdHTTP1.Host := edHost.Text;
IdHTTP1.Request.ContentLength := length(Memo1.Lines.Text);
IdHTTP1.Request.ContentType := edContentType.Text;
IdHTTP1.Request.CustomHeaders.Text := 'SOAPAction: "removed for safe"'#13#10;
IdHTTP1.request.CacheControl := 'no-cache';
IdHTTP1.Request.AcceptEncoding := edAccept.Text;
IdHTTP1.HTTPOptions := [hoKeepOrigProtocol];
IdHTTP1.ProtocolVersion := pv1_1;
Memo2.Clear;
try
s := IdHTTP1.post(Edit1.Text, vRequest);
Memo2.Lines.Text := s;
except
on e: EIdHTTPProtocolException do begin
Label1.Caption …Run Code Online (Sandbox Code Playgroud) 我在使用Idhttp.Get方法时遇到了一些问题.我认为它默认工作在阻塞模式(等待答案转到下一行),但我只是看到它不等待答案转到另一行.我正在使用它与线程,但我认为这不是问题.代码是:
IdHTTP1:= TIdHttp.Create(Application);
IdHTTP1.ConnectTimeout:= 10000;
IdHTTP1.Request.Clear;
IdHTTP1.Request.BasicAuthentication:= true;
IdHTTP1.Request.Username := Username;
IdHTTP1.Request.Password := Password;
try
IdHTTP1.Get(PbxURL); **//this should STOP here and wait for answer don't?**
HttpCode:= IdHTTP1.ResponseCode;
except
on E: EIdHTTPProtocolException do
HttpCode := IdHTTP1.ResponseCode;
end;
if HttpCode=200 then
Memo1.Lines.Append('Valid Get!');
Run Code Online (Sandbox Code Playgroud)
所以,我只是注意到我没有得到正确的HttpCode值,因为在'Get'方法之后,它只是继续执行而不等待'Get'完成.我怎么解决这个问题??
我的应用程序可以从memo1中的每个URL下载一张图片.它使用idhttp.get并有一个跳过按钮.跳过之后下载下一张图片.
Q1:你有代码放入析构函数,"终止"和"等待"的代码是什么? 我在另一个网站上发现了这个:
destructor thread.destroy;
begin
try
Terminate;
If HTTP.Connected then HTTP.Disconnect;
finally
WaitFor;
FreeAndNil(HTTP);
end;
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
Q2:如何调用析构函数并使其工作?
问题3:您是否有提示(特别是安全问题)和其他代码行?
我的申请代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP;
type
thread = class
public
Constructor Create; overload;
Destructor Destroy; override;
end;
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
startbutton: TButton;
skipbutton: TButton;
procedure startbuttonClick(Sender: TObject);
procedure skipbuttonClick(Sender: TObject);
procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: …Run Code Online (Sandbox Code Playgroud) 我注意到我在使用 Indy Client 的应用程序中的 XML 文件有无效字符(我实际上使用了 IdHttp 的默认参数)
这是我的代码:
ts := TStringList.Create;
try
ts.Add('XML=' + AXMLDoc.XML.Text));
HTTPString := IdHTTPClient.Post('http://' + FHost + ':' + IntToStr(FPort) + FHttpRoot, ts);
finally
ts.Free;
end;
Run Code Online (Sandbox Code Playgroud)
我的 XML 文件是 UTF-8 编码的。
我必须做什么才能在我的服务器上获得良好的编码(我也使用 Indy 作为服务器)?
我正在使用IDHTTP从事Delphi XE5和从服务器获取XML.获取XML工作正常,但有一些破碎的字符.角色是'•'(子弹点).其他人都很好,但要点已经破裂.
我创建了IDHTTP,如下所示:
idhttps := TIdHTTP.Create();
idhttps.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
idhttps.IOHandler.DefStringEncoding := IndyTextEncoding(TEncoding.UTF8);
idhttps.HandleRedirects := True;
idhttps.ConnectTimeout := 5000;
idhttps.Request.USERNAME := 'USERNAME';
idhttps.Request.PASSWORD := 'PASSWORD';
idhttps.Request.BasicAuthentication := True;
idhttps.Request.Accept := 'text/xml';
Run Code Online (Sandbox Code Playgroud)
然后得到如下的xml:
SS := TStringStream.Create('', TEncoding.UTF8);
try
self.GetIdHTTPForLexicomp.Get(URL, SS);
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.LoadFromStream(SS, TXMLEncodingType.xetUTF_8Like);
finally
SS.Free;
end;
Run Code Online (Sandbox Code Playgroud)
在XML中,项目符号点如下所示:
?过敏反应/过敏反应:可能引起过敏反应,
XML标题如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)
我该怎么检查?
更新:我添加了XML代码段.它需要一个XSL文件用于样式,但在这种情况下,我认为这不是问题.'?' 是破碎的人物.
<?xml version="1.0" standalone="yes"?>
<ns2:monogragh>
<monograghFields>
<field fieldId="234837" fieldTypeCode="war" created="2005-04-07T17:28:33Z" modified="2014-10-02T11:32:57Z" sectionId="0">
<fieldName>Warnings/Precautions</fieldName>
<content>
<div id="war" class="block">
<p style="text-indent:-2em;margin-left:2em;text-align:justify;">
<b>
<i>Concerns related to adverse …Run Code Online (Sandbox Code Playgroud) 我曾经遇到过一个使用了几个网站JSON的请求和响应
我遇到两种类型:
1 application/x-www-form-urlencoded请求和返回响应application/json内容类型
2- application/json内容类型请求和响应
在type 1我试图用改变的响应内容类型
mIdHttp.Response.ContentType := 'application/json';
,但使用HTTP分析器,我可以看到它没有改变,它text/html
现在仍然不知道问题是否与我无法改变内容类型的事实,但我不知道如何处理json!
关于json以下问题:
1-我必须在发布时对json数据进行编码吗?怎么样 ?
2-我如何解析json响应代码?怎么弄明白?它需要某种编码或特殊转换吗?
3- json的哪种idhttp设置随每个站点的变化而需要配置?
我理解我的问题听起来有点笼统,但所有其他问题都非常具体,并且在处理'application/json'内容类型时没有解释基本知识.
编辑1:
感谢Remy Lebeau 回答我能够成功合作,type 1
但我仍然无法发送JSON请求,有人可以分享一个工作示例,这是发布信息的网站之一,请使用此示例:
一个重要的注意事项: 这个特定网站的帖子和请求内容完全相同!因为在现场,我指定它令我感到困惑start date和end date然后点击一个folder like icon,这post被发送(一个你可以在上面看到),而result应该是links(它是),而不是只出现在request content它们也会出现在post!(我也试图获取链接,但在post链接,我想要的东西,也被发送,我怎么能发布我没有的东西!!?)
我将JSON发送到端点,我遇到了问题.执行工作正常,但是在HTTP.Post()完成屏幕发布以供使用之后,表单会一直停滞到结束.我确定我做错了什么.
以下是发送JSON的按钮操作:
procedure TForm1.Button1Click(Sender: TObject);
var
HTTP: TIdHTTP;
vJsonAEnviar: TStringStream;
Json:String;
begin
Json := '{ '+
' "user":"Lucy"'+
' "execute":"ok"'+
' } ';
HTTP := TIdHTTP.Create;
HTTP.Request.ContentType := 'application/json';
HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
vJsonAEnviar := TStringStream.Create(UTF8Encode(Json));
HTTP.Post('http://localhost:8080/exportaManual', vJsonAEnviar);
FreeAndNil(HTTP);
FreeAndNil(vJsonAEnviar);
end;
Run Code Online (Sandbox Code Playgroud)
另一方面,它需要一段时间才能完成并且屏幕会长时间停留.
检查是否可以使用delphi下载文件
美好的一天...我在Delphi开始,我正在创建一个从HTTP下载文件的程序...
我正在使用:
IdHTTP.Get (URL FileDownload)
Run Code Online (Sandbox Code Playgroud)
但是我的程序在无法下载文件时会生成错误...
例如:http://exemplo.com/ - >生成错误
例如:http://exemplo.com/meudownload.ts - >进行下载
我想更正此错误,如何检查是否可以下载该文件或是否正在降低该文件...
我用EIdHTTPProtocolExeption但只检查HTML错误,如:404,300 ......并不是我希望...
我想看看你是否可以下载该文件,或者是否正在下载该文件...
如果发生这种情况,我会下载其他文件:
donw_1.ts,down_2.TS,down_3.TS ......然后当他获得一个无法下载的存档时,我有了取消循环的答案......
delphi ×11
idhttp ×11
indy ×4
json ×2
android ×1
boringssl ×1
delphi-2010 ×1
delphi-5 ×1
delphi-xe ×1
delphi-xe2 ×1
delphi-xe4 ×1
delphi-xe5 ×1
destructor ×1
disconnect ×1
encoding ×1
ssl ×1
terminate ×1
txmldocument ×1
vcl ×1
xml ×1