标签: winhttp

如何防止ServerXMLHTTP自动跟踪重定向(HTTP 303请参阅其他响应)?

我正在使用ServerXMLHTTP来执行HTTP POST.返回的响应是重定向(具体为303见其他).ServerXMLHTTP会自动跟随此重定向,但这会导致身份验证失败,因为它不会传播原始请求的Authorization标头.

有没有办法可以阻止自动重定向(或者确保重新发送Authorization标头)?

post redirect http serverxmlhttp winhttp

4
推荐指数
1
解决办法
5567
查看次数

HttpAddUrl权限

我正在尝试在Windows Server 2008计算机上运行基于WinHTTP的自定义Web服务器.

我将"http://*:22222 /"传递给HttpAddUrl

当我以Administrator或LocalSystem启动我的可执行文件时,一切正常.但是,如果我尝试将其作为NetworkService运行以最小化安全风险(因为没有合法的原因让应用程序使用管理员权限)功能失败并显示"拒绝访问"错误代码.

我不知道NetworkService对它可以监听的端口和接口有任何限制.

有没有办法以这种方式配置权限,以便我实际上可以在NetworkService帐户下运行应用程序并从其他Internet主机连接到它?

c++ windows security networking winhttp

4
推荐指数
1
解决办法
1509
查看次数

使用WinHTTP API进行证书固定

是否可以使用Win32 WinHTTP API来实现证书固定,如果可以,怎么办?即,如何才能针对“已知的良好”证书检查返回的服务器证书,最好不必将证书永久写入本地证书存储中。

c ssl winapi winhttp

4
推荐指数
1
解决办法
2974
查看次数

.NET中的WinHttp.WinHttpRequest

是否有可以替换或像WinHttp.WinHttpRequest一样工作的内置.NET类?

谢谢!

.net winhttp winhttprequest

3
推荐指数
1
解决办法
9211
查看次数

使用win32inet.WinHttpGetProxyForUrl的正确方法是什么

我正在尝试使用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的替代实现吗?只要我能使它工作我就开心!

python windows com 32-bit winhttp

3
推荐指数
1
解决办法
2739
查看次数

使用Delphi XE将通过WinHTTP下载的文件保存到磁盘

这个问题的回答表明,在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)

delphi download winhttp delphi-xe

3
推荐指数
1
解决办法
3599
查看次数

什么是短语"HTTP.SYS中的URL保留"是什么意思?

无法理解这句话的意思.论坛上的人建议彼此在HTTP.sys中保留网址,但这是什么意思?它是为了什么?它是如何工作的?它全部来自HttpWebRequest uac问题.

c# http winhttp http.sys

3
推荐指数
1
解决办法
2409
查看次数

如何在 C++ 上使用 WinHTTP 进行 HTTPS 调用(POST 请求)?

我正在 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)

c++ https winhttp

3
推荐指数
1
解决办法
6235
查看次数

Winhttp - 如果对等证书无效,则阻止成功握手

编辑:线程: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)

delphi security network-programming winhttp delphi-7

3
推荐指数
1
解决办法
818
查看次数

Wcf 服务适用于 .NET Core 3.1 控制台应用程序,但无法适用于 ASP.NET Core 3.1 Web API

在工作中遇到一个奇怪的问题。尝试连接到基于 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

3
推荐指数
1
解决办法
7838
查看次数