我正在使用ServerXMLHTTP来执行HTTP POST.返回的响应是重定向(具体为303见其他).ServerXMLHTTP会自动跟随此重定向,但这会导致身份验证失败,因为它不会传播原始请求的Authorization标头.
有没有办法可以阻止自动重定向(或者确保重新发送Authorization标头)?
我正在尝试在Windows Server 2008计算机上运行基于WinHTTP的自定义Web服务器.
我将"http://*:22222 /"传递给HttpAddUrl
当我以Administrator或LocalSystem启动我的可执行文件时,一切正常.但是,如果我尝试将其作为NetworkService运行以最小化安全风险(因为没有合法的原因让应用程序使用管理员权限)功能失败并显示"拒绝访问"错误代码.
我不知道NetworkService对它可以监听的端口和接口有任何限制.
有没有办法以这种方式配置权限,以便我实际上可以在NetworkService帐户下运行应用程序并从其他Internet主机连接到它?
是否可以使用Win32 WinHTTP API来实现证书固定,如果可以,怎么办?即,如何才能针对“已知的良好”证书检查返回的服务器证书,最好不必将证书永久写入本地证书存储中。
是否有可以替换或像WinHttp.WinHttpRequest一样工作的内置.NET类?
谢谢!
我正在尝试使用Win32com开发人员公开的Microsoft WinHttp库的一个功能.遗憾的是,大多数库似乎没有记录,并且没有通过win32com库使用win32inet功能的正确方法的示例.
这是我到目前为止:
import win32inet
hinternet = win32inet.InternetOpen("foo 1.0", 0, "", "", 0)
# Does not work!!!
proxy = win32inet.WinHttpGetProxyForUrl( hinternet, u"http://www.foo.com", 0 )
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我所要做的就是使用win32inet功能找出哪个代理适用于给定的URL,在他的案例中为foo.com.
你能帮我纠正最后一行的语法吗?MSN 对于被包装的函数有一些很好的文档,但args似乎并没有完美地映射到python库的那些.
该脚本的固定版本应该:
能够查找用于任何给定URL的代理.
它应该始终完全符合Internet Explorer的要求(即使用相同的代理)
它应该在任何有效的Windows XP设置上有效.这意味着它应该使用显式配置的代理,并且根本不需要代理.
它只需要在Python 2.4.4的Windows XP 32bit上运行.它可以使用任何官方发布的win32com版本.
我在Windows XP上使用Python2.4.4和Win32Com.
更新0:
或者......你能给我一个cTypes的替代实现吗?只要我能使它工作我就开心!
对这个问题的回答表明,在delphi中通过类型库导入使用WinHTTP是多么容易.
我为WinHTTP导入了类型库,然后尝试使用该API编写文件下载帮助程序函数.这是我有多远:
我似乎无法弄清楚如何将IWinHttpRequest.ResponseStream(在TLB文件中声明为OleVariant)作为Stream保存到磁盘.
// IWinHttpRequest is defined by importing type library of WinHTTP.
// Microsoft WinHTTP Services, version 5.1 (Version 5.1) C:\Windows\system32\winhttp.dll
function Download(const url, filename: String): Boolean;
var
http: IWinHttpRequest;
wUrl: WideString;
fs:TFileStream;
FileStream:IStream;
sz,rd,wr:Int64;
begin
try
wUrl := url;
http := CoWinHttpRequest.Create;
http.open('GET', wurl, False);
http.send(EmptyParam);
FStatus := http.status; // 200=OK!
result := FStatus=200;
if result then
begin
fs := TFileStream.Create(filename, fmCreate, fmShareExclusive );
try
FileStream := TStreamAdapter.Create(fs, soReference) as IStream;
sz := http.ResponseStream.Size;
http.ResponseStream.CopyTo(FileStream,sz,rd,wr);
finally …Run Code Online (Sandbox Code Playgroud) 无法理解这句话的意思.论坛上的人建议彼此在HTTP.sys中保留网址,但这是什么意思?它是为了什么?它是如何工作的?它全部来自HttpWebRequest uac问题.
我正在 C++ 上编写程序以使用 WinHTTP 调用(POST 请求)到 Java Servlet。当我通过 HTTP 请求 POST 时一切正常,当我通过 HTTPS 请求时出现问题。它向服务器发送空请求但切断请求正文(但它有内容)
int sendPostRequest(char *pszPostData, LPCTSTR servletUrl, char* resultBuffer, ofstream &outputFile) {
outputFile << "====================================== SENDING REEQUEST ======================================" << endl;
HINTERNET hSession = WinHttpOpen(
userAgent,
WINHTTP_ACCESS_TYPE_NO_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS,
0);
if (!hSession)
{
_tprintf(_TEXT("Failed to open WinHTTP session: %ld\n"), GetLastError());
outputFile << "Failed to open WinHTTP session: %ld\n" << GetLastError() << endl;
return NULL;
}
else {
_tprintf(_TEXT("Oppening WinHTTP session successful: %ld\n"), GetLastError());
outputFile << "Oppening WinHTTP session successful: …Run Code Online (Sandbox Code Playgroud) 编辑:线程:https://security.stackexchange.com/questions/179352/winhttp-prevent-successful-handshake-if-peer-certificate-is-invalid讨论并回答了这个问题。该功能暂时可以关闭
在delphi项目上使用windows平台提供的WinHTTP来调用服务器。
脚本:
userAgent := 'TestClient.exe';
hsession := WinHttpOpen(pwidechar(userAgent), WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, nil, nil, 0);
if(hsession = nil) then ShowMessage('Failed WinhttpOpen');
p := 'https';
port := 443;
requestflags := WINHTTP_FLAG_SECURE;
server := '10.0.0.221';
hconnection := WinHttpConnect(hsession, PWideChar(server), port, 0);
if(hconnection = nil) then
begin
le := GetLastError;
ShowMessage('Failed to connect: ' + IntToStr(le));
end;
Action := 'GET';
hInetRequest := WinHttpOpenRequest(hconnection, pwidechar(Action), nil, nil, nil, nil, WINHTTP_FLAG_SECURE);
if(hInetRequest = nil) then
begin
le := GetLastError;
ShowMessage('Failed to connect: ' + IntToStr(le)); …Run Code Online (Sandbox Code Playgroud) 在工作中遇到一个奇怪的问题。尝试连接到基于 https、自定义客户端证书的连接服务。我正在使用 BasicHttpsBinding 和 ChannelFactory 类为服务创建客户端。
能够连接到服务并在 3.1 控制台应用程序上获得响应,但是当我将相同的代码放入 3.1 Web API 控制器时,当我尝试使用客户端调用相同的操作时失败,并显示错误“没有端点听...。这可能是由于不正确的肥皂动作造成的”。内部异常表示“winhttp 异常。无法解析服务器名称或地址”。
我尝试运行 fiddler 以查看有什么不同,对于控制台应用程序,我看到一条隧道正在建立到外部服务 URL,但是对于来自 Web API 的调用,我在 Fiddler 上看不到任何内容,这意味着它在 Web API 管道本身的某个地方失败了。
在 Google 上的搜索指向检查代理设置,因为这是在公司网络上,但netsh winhttp 显示代理 显示直接(无代理服务器),所以我认为这不是与公司代理相关的问题。
3.1 控制台应用程序和 Web API 之间的网络堆栈究竟有何不同,WCF 服务调用可能会在 Web API 中失败但在控制台应用程序中工作?
有问题的代码
var binding = new BasicHttpsBinding();
binding.Security.Mode = BasicHttpsSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
var endpoint = new EndpointAddress(new Uri("https://service url"));
var channelFactory = new ChannelFactory<ExternalServiceInterface>(binding, endpoint);
channelFactory.Credentials.ClientCertificate.Certificate = new X509Certificate2(certificatepath, password);
_client = channelFactory.CreateChannel();
var …Run Code Online (Sandbox Code Playgroud) wcf winhttp asp.net-core-webapi .net-core-3.1 asp.net-core-3.1