使用 HttpSendRequest 强制进行基本身份验证?

bpe*_*kes 6 c++ authentication wininet

用于在连接到服务时InternetSetOption设置username和。我注意到,即使我先调用 InternetSetOption,当我调用时也不会发送授权标头。看起来很荒谬,您必须首先从服务器获取带有 WWW-Authenication 标头的响应。这会在每个请求上向服务器创建一个完整的额外请求。passwordRESTWinInetHttpSentRequest

是否有WinInet调用在第一次调用时强制授权标头,或者我是否必须手动添加它?

Enn*_*nno 1

经过一番思考和研究,我认为答案是否定的。要设置授权标头,WinInet 需要知道应使用什么身份验证方法,而不仅仅是用户名和密码。确定身份验证方案的标准方法是发送未经身份验证的请求并读取 WWW-Authenticate 标头。

如果您知道您的请求需要基本身份验证,您可以使用以下方法自行设置 Authorization: 标头HttpAddRequestHeaders

   HttpAddRequestHeaders(hRequest, TEXT("Authentication: Basic dXNlcjpwYXNzd29yZA=="), -1, HTTP_ADDREQ_FLAG_REPLACE);
Run Code Online (Sandbox Code Playgroud)

使用 计算您自己的“user:password”字符串的 base64 编码CryptBinaryToString