![使用 libcurl 进行 HTTP 请求的代理设置](https://linux22.com/image/1363517/%E4%BD%BF%E7%94%A8%20libcurl%20%E8%BF%9B%E8%A1%8C%20HTTP%20%E8%AF%B7%E6%B1%82%E7%9A%84%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE.png)
我对涉及代理和身份验证的 HTTP 协议还不太熟悉。我正在开发一个在 Windows 上运行的应用程序,它使用主机网络发送/接收 HTTP/S 请求。它还使用 Libcurl 来帮助传输。
但是,当我必须使用代理时,我遇到了一些问题。由于我在网络上,因此我使用 PAC 文件为某些 URL 定义了代理。由于 Libcurl 不支持 Javascript,因此我使用 PACParser 来解析 PAC 文件并确定代理。
当我使用代理时,我收到 407 身份验证要求。我不确定如何克服代理身份验证。我尝试了 CURL 的各种可用设置,如 BASIC / DIGEST / NTLM。它们似乎都不起作用。但如果我在请求中对用户名和密码进行硬编码,我会看到请求通过。
如何避免对用户名/密码进行硬编码并确保代理使用有效?
答案1
请参阅libcurl-tutorial (3)
第环境变量:
libcurl automatically checks and uses a set of environment
variables to know what proxies to use for certain
protocols. The names of the variables are following an
ancient de facto standard and are built up
as "[protocol]_proxy" (note the lower casing). Which makes
the variable 'http_proxy' checked for a name of a proxy to
use when the input URL is HTTP. Following the same rule, the
variable named 'ftp_proxy' is checked for FTP URLs. Again,
the proxies are always HTTP proxies, the different names of
the variables simply allows different HTTP proxies to be
used.
The proxy environment variable contents should be in the
format "[protocol://][user:password@]machine[:port]".
所以你必须在环境变量设置中输入代理,而不是网络设置。