使用Vibe.d通过代理发送HTTP请求遇302跳转问题求助
解决Vibe.d使用代理时返回302重定向的问题
你遇到的核心问题是Vibe.d默认不会自动跟随HTTP重定向,而Python的requests库默认会处理重定向,这就是两者表现不同的主要原因。下面是具体的解决步骤和代码调整方案:
1. 启用自动重定向
修改你的HTTPClientSettings,开启followRedirects选项,让Vibe.d自动处理302这类重定向响应:
HTTPClientSettings settings = new HTTPClientSettings; settings.proxyURL = URL.parse("http://gb.smartproxy.com:30000"); settings.followRedirects = true; // 关键:启用自动跟随重定向 auto response = requestHTTP("https://dlang.org", (scope req) { req.method = HTTPMethod.GET; }, settings).bodyReader.readAllUTF8; writeln(response);
2. (可选)设置匹配的User-Agent头
部分网站会根据请求的User-Agent头返回不同内容或触发重定向。Vibe.d的默认User-Agent和requests不同,你可以手动设置一个和requests一致的User-Agent来避免这类问题:
HTTPClientSettings settings = new HTTPClientSettings; settings.proxyURL = URL.parse("http://gb.smartproxy.com:30000"); settings.followRedirects = true; auto response = requestHTTP("https://dlang.org", (scope req) { req.method = HTTPMethod.GET; // 模拟requests默认的User-Agent req.headers["User-Agent"] = "python-requests/2.31.0"; }, settings).bodyReader.readAllUTF8; writeln(response);
3. 额外检查:代理认证(如果需要)
如果你的代理需要用户名密码验证,记得补充以下配置:
settings.proxyUser = "your_proxy_username"; settings.proxyPassword = "your_proxy_password";
为什么会出现这个问题?
Python的requests库默认会自动跟随最多30次HTTP重定向,而Vibe.d的HTTPClientSettings中followRedirects的默认值是false,所以你直接拿到了302的响应内容,而不是重定向后的最终页面。启用重定向跟随之后,Vibe.d就会像requests一样自动请求重定向目标地址,返回你期望的内容。
内容的提问来源于stack exchange,提问作者Hampus Rosencrantz
相关产品推荐
相关产品推荐

