强制使用 HttpSendRequest 进行基本身份验证
Force Basic Authentication with HttpSendRequest?
本文关键字:身份验证 HttpSendRequest 更新时间:2023-10-16
使用 InternetSetOption
设置连接到REST
服务时的username
和password
。我注意到当我调用HttpSentRequest
时,即使我先调用了InternetSetOption,WinInet
也不会发送授权标头。您必须先使用WWW-Authenication标头从服务器获得响应似乎很荒谬。这会在每个请求上向服务器创建一个完整的额外请求。
是否有WinInet
调用在第一次调用时强制授权标头,或者我是否必须手动添加它?
在 HttpSendRequestW 之前调用函数 InternetSetOptionW。例如:
InternetSetOptionW( hRequest, INTERNET_OPTION_USERNAME, (void*) pwszAuthUserName, wcslen( pwszAuthUserName ) + 1 );
InternetSetOptionW( hRequest, INTERNET_OPTION_PASSWORD, (void*) pwszAuthPassword, wcslen( pwszAuthPassword ) + 1 );
HttpSendRequestW( hRequest, 0, -1, 0, 0 );
经过一番深思熟虑和研究,我认为答案是否定的。若要设置授权标头,WinInet 需要知道它应该使用哪种身份验证方法,而不仅仅是什么用户名和密码。确定身份验证方案的标准方法是发送未经身份验证的请求并读取 WWW-Authenticate 标头。
如果您知道您的请求需要基本身份验证,则可以使用 HttpAddRequestHeaders
自行设置 Authorization: 标头:
HttpAddRequestHeaders(hRequest, TEXT("Authentication: Basic dXNlcjpwYXNzd29yZA=="), -1, HTTP_ADDREQ_FLAG_REPLACE);
使用 CryptBinaryToString
计算您自己的"用户:密码"字符串的 base64 编码。
相关文章:
- LibGit2 SSH身份验证失败
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- 如何通过NetHTTPClient在HTTPS中进行身份验证
- 处理身份验证弹出窗口在wxWebView
- 如何测试我的谷歌身份验证器实现?
- 通过 Boost 和 C++ 进行 SMTP 身份验证
- libtorrent是否支持带摘要身份验证的http web种子
- 将Windows身份验证与cpprestsdk一起使用
- OCCI:使用SSL钱包身份验证连接到OracleDB
- 为什么我不能使用外围设备进行身份验证
- 无法使用C++代码向MongoDB进行身份验证
- 模拟的 HTTP 身份验证仅在本地主机上工作
- 使用OpenSSL的SHA 512 HMAC消息身份验证的问题
- Windows 套接字和身份验证构建在包含 Poco-Library 时失败
- 如何对进程进行身份验证
- 如何使用GSOAP初始化服务器上下文以启用简单身份验证(仅服务器身份验证)
- 解析 HTTP 的摘要式身份验证的正确正则表达式模式是什么?
- 在 SSH 上的公钥-私钥身份验证上的 libcurl 实现
- 使用 WinInet 的客户端身份验证(证书 + 私钥)
- QT REST客户端为Microsoft认知服务翻译器API获得身份验证令牌