gpt4 book ai didi

java - java Rest请求时偶尔出现"407 Proxy Authentication Required"错误

转载 作者:行者123 更新时间:2023-12-01 19:37:46 32 4
gpt4 key购买 nike

我正在尝试对我的客户端 URL 之一执行 REST 请求,以使用代理获取响应。大多数时候我能够使用我的代码获取响应。但有时当我尝试使用我的代理发送请求时代码我收到“407需要代理身份验证”错误。这种情况很少发生,但一旦我收到此错误,对于每个连续的请求,我都会收到相同的错误。但是当我使用 chrome 中的 POSTMAN 工具将生成的相同请求发送到相同的 URL,我将收到响应。但是,一旦我收到来自 POSTMAN 的响应,如果我再次尝试使用我的代码,我不仅会从本地计算机上收到响应,还会从运行代码的不同计算机上收到响应。我对这个问题感到非常困惑,无法弄清楚为什么会出现这种奇怪的情况。我的代码中是否缺少某些内容。请帮助我。我在下面给出了我的代码:

代码

public Map<String ,Object> ConnectRestService(MyRequest myRequest, String postURL, String httpProxy,int timeout int httpPort, Map<String ,Object> responseMap)
throws KeyManagementException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, CustomException{

MyResponse myResponse = new MyResponse();
Map<String ,Object> responseReturnMap = new HashMap<>();
String output = "";
TrustStrategy acceptingTrustStrategy = new TrustStrategy() {

@Override
public boolean isTrusted(java.security.cert.X509Certificate[] chain, String authType)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
return true;
}
};

SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, acceptingTrustStrategy)
.build();


SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
HttpClient httpClient;
httpClient = HttpClients.custom().setSSLSocketFactory(csf).setProxy(new HttpHost(httpProxy, httpPort)).build();

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-type", "text/xml");
httpHeaders.add("Accept", "text/xml");
httpHeaders.add("access-control-allow-origin", "*");
httpHeaders.add("content-encoding", "UTF-8");
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
requestFactory.setConnectTimeout(timeout);


try {
RestTemplate restTemplate = new RestTemplate(requestFactory);
HttpEntity<MyRequest> entity = new org.springframework.http.HttpEntity<MyRequest>(
myRequest, httpHeaders);
ResponseEntity<String> response = restTemplate.exchange(postURL, HttpMethod.POST, entity, String.class);


} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}

return responseReturnMap;
}

请帮我弄清楚我在这里缺少什么。

最佳答案

如果是 407错误,您收到的响应必须包含特殊的 Proxy-Authenticate header 。此 header 将告诉您代理服务器期望哪种身份验证。

您需要做的是包含 Proxy-Authorization您的请求中的 header 。代理授权 header 的典型语法是 Proxy-Authorization:<type-of-authentication-scheme> <credentials-for-authentication-at-proxy-server> .

Proxy-Authenticate header 会让您知道需要使用的身份验证方案的类型。

关于java - java Rest请求时偶尔出现"407 Proxy Authentication Required"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56766381/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com