Apache HTTP客户端代理连接求助:添加SessionId至代理请求头
解决方案:将CURL命令转换为Apache HTTP Client代码并添加自定义代理头
我来帮你搞定这个问题!你要实现的就是把指定的CURL请求转换成Apache HttpClient代码,核心是给代理服务器添加两个自定义请求头:Proxy-Authorization和sessionid。其实Apache HttpClient添加代理请求头的关键是用请求拦截器(HttpRequestInterceptor)——因为常规的请求头是发给目标服务器的,而代理头是专门发给代理服务器的,得单独通过拦截器来处理。
对应你CURL命令的完整代码
import org.apache.http.HttpHost; import org.apache.http.HttpRequestInterceptor; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import java.io.IOException; public class ProxyWithCustomHeaders { public static void main(String[] args) { // 1. 配置代理服务器信息 HttpHost proxyServer = new HttpHost("xxx.xxxxx.com", 13128, "https"); // 2. 创建HttpClient并配置代理+自定义代理头 try (CloseableHttpClient httpClient = HttpClientBuilder.create() .setProxy(proxyServer) // 添加拦截器,给代理请求注入自定义头 .addInterceptorFirst((HttpRequestInterceptor) (request, context) -> { // 添加Proxy-Authorization凭证头 request.addHeader("Proxy-Authorization", "Basic xxxxxxxxxxxx"); // 重点:添加sessionid到代理请求头 request.addHeader("sessionid", "xxxxxxx.xxxx"); }) .build()) { // 3. 创建目标请求(对应CURL里的https://www.google.com) HttpGet targetRequest = new HttpGet("https://www.google.com"); // 4. 执行请求(对应CURL的-o /dev/null,这里我们忽略响应体,只处理状态) httpClient.execute(targetRequest, response -> { System.out.println("请求响应状态:" + response.getStatusLine()); return null; // 不需要返回响应体,模拟-o /dev/null的行为 }); } catch (IOException e) { e.printStackTrace(); } } }
关键部分说明
- 代理头的添加方式:通过
addInterceptorFirst添加的拦截器,会在请求发送给代理服务器之前执行,这里的request.addHeader操作是给代理服务器的请求添加头,而不是给目标Google服务器的请求头,这刚好对应你CURL里的--proxy-header参数。 - 资源自动管理:用
try-with-resources包裹HttpClient,确保请求完成后自动关闭客户端,避免资源泄漏。 - 模拟
-o /dev/null:通过httpClient.execute的第二个参数,我们只处理响应状态,不读取响应体,和CURL里丢弃输出的行为一致。
如果你已经有部分代码,只需要把拦截器的部分插入到你的HttpClient构建流程里,就能顺利把sessionid添加到代理请求头中啦。
内容的提问来源于stack exchange,提问作者DevAndroid
相关产品推荐
相关产品推荐

