请给出建议.我想在WinInet上的Delphi中开发FTP/SFTP/FTPS客户端下载管理器.关于做什么更好(Indy,ISC Components,WinInet ......)?可能已经有解决方案?
注意:我只想使用wininet,而不是urlmon-urldownloadtofile.
好吧,我有以下代码在XE2中完美地下载文件:
procedure DownloadFile(URL: string; Path: string);
const
BLOCK_SIZE = 1024;
var
InetHandle: Pointer;
URLHandle: Pointer;
FileHandle: Cardinal;
BytesRead: Cardinal;
DownloadBuffer: Pointer;
Buffer: array [1 .. BLOCK_SIZE] of byte;
BytesWritten: Cardinal;
begin
InetHandle := InternetOpen(PWideChar(URL), 0, 0, 0, 0);
URLHandle := InternetOpenUrl(InetHandle, PWideChar(URL), 0, 0, 0, 0);
FileHandle := CreateFile(PWideChar(Path), GENERIC_WRITE, FILE_SHARE_WRITE, 0,
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
DownloadBuffer := @Buffer;
repeat
InternetReadFile(URLHandle, DownloadBuffer, BLOCK_SIZE, BytesRead);
if not WriteFile(FileHandle, DownloadBuffer, BytesRead, BytesWritten, 0) or
(BytesWritten <> BytesRead) then
RaiseLastOSError;
until BytesRead < …
Run Code Online (Sandbox Code Playgroud) 我的VB6如何形成POST 2变量,如何从URL中提取结果,然后将VB6变量分配给结果?
我需要有人向我展示非常基本的VB6示例代码,或为我指明正确的方向。这是最简单的形式-在最终产品中,PHP变量将写入MySQL,但这不是我需要的帮助。
我有一个简单的PHP页面,它接受2个参数:
test.php?var1=secret&var2=pass
Run Code Online (Sandbox Code Playgroud)
这是我非常简单的PHP代码
<?php
$var1 = $_GET['var1'];
$var2 = $_GET['var2'];
$varAcc = "ACCEPTED";
$varDen = "DENIED";
if ($var1 === "secret" && $var2 === "pass")
{
echo $varAcc;
}
else
{
echo $varDen;
}
?>
Run Code Online (Sandbox Code Playgroud)
其背后的逻辑是使用“ userName”,“ passWord”和“ hardWareID”进行VB6登录,并发送哈希。将对照MySQL检查该散列,以查看其是否存在,并返回YES或NO以进行访问,其帐户还剩多少天以及其他一些详细信息,例如FULL NAME,ACCOUNT INFO等。
(不。我不想使用XML,只是以为我会把它放在那里。只需POST&Receive to vars)
谢谢...
我试图从http:服务器下载二进制文件.我使用的功能InternetOpenUrl()
,然后InternetReadFile()
下载文件.下载之前是否可以知道文件的大小?
谢谢Vinod
我正在研究VB6中的一个项目.我必须添加下载功能.它包含1个表单,1个类模块和1个模块(bas)文件.当我将现有模块添加到我的项目时,它是成功的但是当我尝试将类模块或frm文件添加到项目时,它会显示OUT OF MEMORY.我一直在讨论这个问题很长一段时间但是找不到任何解决办法.
我不能发布任何代码,因为它是一个公司项目.我只能说它是一个包含数千行代码的庞大项目.我试图添加的模块用于通过HTTP下载文件,它访问Wininet.dll中的方法.
我不知道项目是否达到了代码行的最大限制,或者它是否是变量问题.
我听说制作DLL可以解决这个问题,但我们不需要这样做.有人可以帮忙吗?
与如何使用WinInet api在Delphi中发送HTTP POST请求相关:
如何发布帖子请求并跟踪进度?
这不起作用(查看评论):
procedure StatusCallback(
hInet: HINTERNET;
Context: DWORD_PTR;
Status: DWORD;
pInformation: Pointer;
InfoLength: DWORD ); stdcall;
var
s: string;
c: Cardinal;
begin
case Status of
INTERNET_STATUS_CLOSING_CONNECTION: s := 'Closing the connection to the server';
INTERNET_STATUS_CONNECTED_TO_SERVER: s := 'Successfully connected to the socket address: ';
INTERNET_STATUS_CONNECTING_TO_SERVER: s := 'Connecting to the socket address';
INTERNET_STATUS_CONNECTION_CLOSED: s := 'Successfully closed the connection to the server';
INTERNET_STATUS_CTL_RESPONSE_RECEIVED: s := 'Not implemented';
INTERNET_STATUS_HANDLE_CLOSING: s := 'This handle value has been …
Run Code Online (Sandbox Code Playgroud) 我正在制作一个程序,以递归方式列出某个目录中的所有文件,并使用WinINet将每个文件分别上传到FTP服务器.我遇到的问题是在FtpPutFile()函数中使用filesystem :: path :: filename,因为需要LPCWSTR.什么是最好和最简单的转换方式(或以某种方式使用它)?
std::string path = "C:\\Programs";
for (const auto & entry : std::experimental::filesystem::recursive_directory_iterator(path))
FtpPutFile(hIConnect, entry.path().filename(), entry.path().filename(), FTP_TRANSFER_TYPE_BINARY, 0);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:没有合适的转换函数从"const std :: experimental :: filesystem :: v1 :: path"到"LPCWSTR"存在
编辑:这是一个适合我的解决方案,遵循Lightness解决方案:
std::string path = "C:\\Programs";
for (const auto & entry : std::experimental::filesystem::recursive_directory_iterator(path))
FtpPutFile(hIConnect, entry.path().wstring().c_str(), entry.path().filename().wstring().c_str(), FTP_TRANSFER_TYPE_BINARY, 0);
Run Code Online (Sandbox Code Playgroud) DUPE:如何以编程方式检查VC++中的Internet带宽?
我们可以从ping的延迟中找到带宽.如果是,它是如何完成的
我有来自MSDN页面的这个片段
lplpszAcceptTypes
- 指向以null结尾的字符串数组的指针,指示客户端接受的媒体类型.这是一个例子.
PCTSTR rgpszAcceptTypes[] = {_T(“text/*”), NULL};
这里的问题是/*
在“text/*”
读通过智能感知和遵循这条线得到注释掉的代码注释.这里有什么解决方案?