WebConnection 怎样封装上传和下载功能。 (100分)

  • 主题发起人 主题发起人 999roseto347
  • 开始时间 开始时间
9

999roseto347

Unregistered / Unconfirmed
GUEST, unregistred user!
TWebConnection怎样设置代理服务器地址及端口号。
好像只能设置服务器地址,端口号不知道在哪里设置。
----------------------------------------------
上面的问题Lich帮我解决了,下面的问题希望大家也能帮忙解决,解决之后就散分。
-----------------------------------------------------------------------
就是说怎样对WebConnection加入上传文件到Htpp服务和从Http服务器下载文件功能。
 
这样行不?
xxx.xxx.xxx.xxx:PortNo
 
看看,行不行?
 
to lich
现在可以了,你说用TWebConnection取数据速度怎么样,还有安全性呢。
 
速度和网络速度有关,和系统的效率有关,
如果要增强安全性,则数据需要加密传输,
自己可以修改SConnect.pas,实现数据的压缩和加密传输
 
to lich:
你知道怎么在WebConnection中封装Http的上传和下载功能吗?谢谢...
 
不太明白,你另外加一个http客户端组件,
没必要封装在WebConnection中啊,
不过也可以利用DCOM调用来传送和下载较小的文件,
 
to lich:
 刚才你讲的另外加一个Http组件,但我们公司现在就是不想这样做.我们要把这些功能全部封装在一个组件里面,以便日后调用.谢谢...
 
其实,TWebConnection是利用操作系统提供的函数实现的连接,
你可以参照一下它的源码,给他扩展一个方法
 
to lich
你有没有TWebConnection这方面的资料呢。
 
现在大家讨论怎样对WebConnection加入上传文件到Htpp服务和从Http服务器下载文件功能,谢谢...
 
dfw的朋友帮个忙。
 
function Send(const Data: IDataBlock): Integer;
var
Request: HINTERNET;
RetVal, Flags: DWord;
P: Pointer;
AcceptTypes: array of PChar;
begin
SetLength(AcceptTypes, 2);
AcceptTypes[0] := PChar('application/octet-stream');
AcceptTypes[1] := nil;
Flags := INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_NO_CACHE_WRITE;
if FURLScheme = INTERNET_SCHEME_HTTPS then
Flags := Flags or INTERNET_FLAG_SECURE;
Request := HttpOpenRequest(FInetConnect, 'POST', PChar(FURLSite), nil,
nil, Pointer(AcceptTypes), Flags, Integer(Self));
Check(not Assigned(Request));
while Truedo
begin
Check(not HttpSendRequest(Request, nil, 0, Data.Memory, Data.Size + Data.BytesReserved));
RetVal := InternetErrorDlg(GetDesktopWindow(), Request, GetLastError,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS or FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS or
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA, P);
case RetVal of
ERROR_SUCCESS: break;
ERROR_CANCELLED: SysUtils.Abort;
ERROR_INTERNET_FORCE_RETRY: {Retry the operation};
end;
end;
Result := Integer(Request)
end;
 
function Receive(WaitForInput: Boolean;
Context: Integer): IDataBlock;
const
MaxStatusText: Integer = 4096;
var
Size,do
wnloaded, Status, Len, Index: DWord;
S: string;
begin
Len := SizeOf(Status);
Index := 0;
if HttpQueryInfo(Pointer(Context), HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER,
@Status, Len, Index) and (Status >= 300) then
begin
Index := 0;
Size := MaxStatusText;
SetLength(S, Size);
if HttpQueryInfo(Pointer(Context), HTTP_QUERY_STATUS_TEXT, @S[1], Size, Index) then
begin
SetLength(S, Size);
raise Exception.CreateFmt('%s (%d)', [S, Status]);
end;
end;
Len := 0;
repeat
Check(not InternetQueryDataAvailable(Pointer(Context), Size, 0, 0));
if Size > 0 then
begin
SetLength(S, Size);
Check(not InternetReadFile(Pointer(Context), @S[1], Size,do
wnloaded));
if not Assigned(Result) then
begin
Result := TDataBlock.Create;
Len := Result.InitData(@S[1],do
wnloaded, False);
end else
Result.Write(S[1],do
wnloaded);
end;
until Size = 0;
if Assigned(Result) and (Len <> DWord(Result.Size)) then
raise Exception.CreateRes(@SInvalidDataPacket);
end;
 
to lich
这两个方法是TWebConnection的吧,怎样使用呢,能否给出一个范例,谢谢了。
 
WebConnection我试验的结果是不如SocketConnection快。程序响应太慢:-(
 
接受答案了.
 

Similar threads

后退
顶部