我正在使用URLDownloadToFile从网站检索文件.后续调用将返回原始文件而不是更新版本.我假设它正在检索缓存版本.
[免责声明:据我所知,这是一个Windows 7特定问题]
我有一段代码可以更改Windows注册表中的代理设置,然后使用以下代码调用WinInet API:
InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
Run Code Online (Sandbox Code Playgroud)
这在XP和Vista中完全没问题,但是在Windows 7中显然发生了一些变化,并且由于某种原因,之前的注册表键被重新注入,导致它无法按预期工作.
如果我注释掉这两行代码,注册表值会很明显,但显然IE和其他依赖代理信息的应用程序并不知道配置已经改变.
是否有更好的方法来处理通知系统选项已更改并需要重新加载?我已经在这个问题上搜索了几天,切换了编译器等等,而我所做的一切都没有像我期望的那样在Windows 7中运行.
GetErrorMessage(来自CInternetException)给出了以下内容:
使用错误的ftp服务器名称:
"ERROR!无法解析服务器名称或地址"
使用错误的密码:
错误!密码是不允许的
使用不正确的用户名:
ERROR! 密码不允许 <-----?用户名错误没有单独的消息?这是有意的吗?
try
{
pConnect = sess->GetFtpConnection(host, userName, password, port, FALSE );
}
catch (CInternetException* pEx) //incorrect user name displays incorrect password?
{
TCHAR sz[1024];
pEx->GetErrorMessage(sz, 1024);
printf("ERROR! %s\n", sz);
pEx->Delete();
}
Run Code Online (Sandbox Code Playgroud) 我想使用WinInet在Delphi 2010中发送HTTP Post请求,但我的脚本不起作用; /
这是我的Delphi脚本:
uses WinInet;
procedure TForm1.Button1Click(Sender: TObject);
var
hNet,hURL,hRequest: HINTERNET;
begin
hNet := InternetOpen(PChar('User Agent'),INTERNET_OPEN_TYPE_PRECONFIG or INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hNet) then
begin
try
hURL := InternetConnect(hNet,PChar('http://localhost/delphitest.php'),INTERNET_DEFAULT_HTTP_PORT,nil,nil,INTERNET_SERVICE_HTTP,0,DWORD(0));
if(hURL<>nil) then
hRequest := HttpOpenRequest(hURL, 'POST', PChar('test=test'),'HTTP/1.0',PChar(''), nil, INTERNET_FLAG_RELOAD or INTERNET_FLAG_PRAGMA_NOCACHE,0);
if(hRequest<>nil) then
HttpSendRequest(hRequest, nil, 0, nil, 0);
InternetCloseHandle(hNet);
except
ShowMessage('error');
end
end;
end;
Run Code Online (Sandbox Code Playgroud)
和我的PHP脚本:
$data = $_POST['test'];
$file = "test.txt";
$fp = fopen($file, "a");
flock($fp, 2);
fwrite($fp, $data);
flock($fp, 3);
fclose($fp);
Run Code Online (Sandbox Code Playgroud) 我有URI = http://localhost/IO_100_Service.svc/xml?id = {id}的虚拟Web服务,它返回XML格式的数据我想用VC++中的WINInet APi调用这个服务.有人可以帮我怎么用构造"HttpSendRequest"方法来添加标头和数据来调用此服务.
我必须用delphi将文件发送到php脚本.我最终选择使用Wininet功能,因为我必须通过NTLM身份验证代理.
当我发送文件时,我的内容请求的每个字符之间都有空字符(00):
POST /upload.php HTTP/1.1
User-Agent: MYUSERAGENT
Host: 127.0.0.1
Cookie: ELSSESSID=k6ood2su2fbgrh805vs74fvmk5
Pragma: no-cache
Content-Length: 5
T.E.S
Run Code Online (Sandbox Code Playgroud)
这是我的Delphi代码:
pSession := InternetOpen('MYUSERAGENT', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
pConnection := InternetConnect(pSession, PChar('127.0.0.1'), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
pRequest := HTTPOpenRequest(pConnection, PChar('POST'), PChar('/upload.php'), 'HTTP/1.0', nil, nil, INTERNET_SERVICE_HTTP, 0);
HTTPSendRequest(pRequest, nil, 0, Pchar('TESTR'), Length('TESTR'));
Run Code Online (Sandbox Code Playgroud)
对于发生了什么的任何想法?
我对 C++ 编程还很陌生,所以请耐心等待。我正在尝试创建一个用于教育目的的 ftp 客户端,做了一些研究并决定尝试 Wininet,并发现了一些在线教程:
以此为例:
#include <windows.h>
#include <wininet.h>
Run Code Online (Sandbox Code Playgroud)
请注意,没有错误检查或其他任何操作,这只是示例代码。
int main(){
HINTERNET hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hFtpSession = InternetConnect(hInternet, "server", INTERNET_DEFAULT_FTP_PORT, "user", "pass", INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
...
InternetCloseHandle(hInternet);
}
Run Code Online (Sandbox Code Playgroud)
在写这篇文章时,我的 ide(Vs2017) 告诉我“标识符 internetOpenW 未定义”。与“InternetConnect”相同。我一直在寻找解决方案,但没有成功!我将不胜感激任何帮助,因为我没有其他地方可以求助!
请原谅我的英语不好!
您可以传递给 Wininet 函数 HttpOpenRequest 的最大 URL 长度是多少?
我的服务器向我发送了一个使用 GZIP 压缩进行压缩的 JSON 数据流。
当我在普通 IE 浏览器上请求这些数据时,我会得到数据,当我提到要打开的应用程序时,浏览器会自动解压缩该数据流并显示我的 JSON 数据。
我的 C 应用程序使用 COM/OLE 嵌入 IE 浏览器实例,我使用 WININET 进行 GET/POST 操作,所以在这里我压缩了数据。
由于它的 IE 浏览器功能可以在默认 IE 浏览器的情况下自动解压缩 GZIP 数据如何在我的 C 应用程序中通过 WININET 自动解密数据?
我们使用 WinInet 和 Delphi 使用 HTTPS 进行通信。WinInet 中是否有一个函数可以返回给我会话中协商过的协议,即 TLS1.1、TLS 1.2 等。