gpt4 book ai didi

java - 尝试通过代理创建 HttpsURLConnection 时出错

转载 作者:行者123 更新时间:2023-11-30 11:45:39 27 4
gpt4 key购买 nike

当我尝试通过代理建立 url 连接时出现此错误

java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 405 Method Not Allowed"
at sun.net.www.protocol.http.HttpURLConnection.doTunneling(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
at com.test.sslpost.main(sslpost.java:81)

它在打开连接时产生错误,如果我在没有代理的情况下尝试它工作正常。

请看下面描述的java代码

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.URL;
import java.net.URLEncoder;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class sslpost {
public static void main(String[] args) {
try {
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}

public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}

public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
} };

try {

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
System.setProperty("https.proxySet", "true");
System.setProperty("https.proxyHost", "xxx.xxx.xxx.xxx");
System.setProperty("https.proxyPort", "80");
URL url = new URL("https://www.google.com");
@SuppressWarnings("deprecation")
HttpsURLConnection connection = (HttpsURLConnection) url
.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);

connection.setRequestMethod("POST");
connection.setFollowRedirects(true);

String query = "serviceId="
+ URLEncoder.encode("7");

connection.setRequestProperty("Content-length",
String.valueOf(query.length()));
connection.setRequestProperty("Content-Type",
"application/x-www- form-urlencoded");
connection.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");

DataOutputStream output = new DataOutputStream(
connection.getOutputStream());

output.writeBytes(query);

System.out.println("Resp Code:" + connection.getResponseCode());
System.out.println("Resp Message:"
+ connection.getResponseMessage());

DataInputStream input = new DataInputStream(
connection.getInputStream());

for (int c = input.read(); c != -1; c = input.read())
System.out.print((char) c);
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

最佳答案

HTTPS默认使用443端口,HTTP默认使用80端口。

在你的代码中你有这个

 System.setProperty("https.proxyPort", "80");

也许尝试将其设置为 443 而不是 80

关于java - 尝试通过代理创建 HttpsURLConnection 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10265643/

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