- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚开始从事 Java 网络协议(protocol)方面的工作。我正在尝试使用我的代理服务器连接到互联网。当我在“https://www.tutorialspoint.com/javaexamples/net_poxy.htm”看到帖子时',他们将 http.proxyHost 属性设置为 'proxy.mycompany1.local'。我知道我可以将它设置为我的代理服务器 IP,但我很想知道为什么我的程序仍然有效,即使我将它设置为一些随机字符串,如“abcd”。
一个。 “proxy.mycompany1.local”代表什么?
B.为什么我的程序可以运行,即使我将 http.proxyHost"设置为 "abcd"?
以下是我的工作程序:
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.URI;
import java.net.URL;
public class TestProxy {
public static void main(String s[]) throws Exception {
try {
System.setProperty("http.proxyHost", "abcd");
System.setProperty("http.proxyPort", "8080");
URL u = new URL("http://www.google.com");
HttpURLConnection con = (HttpURLConnection) u.openConnection();
System.out.println(con.getResponseCode() + " : " + con.getResponseMessage());
} catch (Exception e) {
e.printStackTrace();
System.out.println(false);
}
Proxy proxy = (Proxy) ProxySelector.getDefault().select(new URI("http://www.google.com")).iterator().next();
System.out.println("proxy Type : " + proxy.type());
InetSocketAddress addr = (InetSocketAddress) proxy.address();
if (addr == null) {
System.out.println("No Proxy");
} else {
System.out.println("proxy hostname : " + addr.getHostName());
System.out.println("proxy port : " + addr.getPort());
}
}
}
这是输出:
200 : OK
proxy Type : HTTP
proxy hostname : abcd
proxy port : 8080
最佳答案
首先根据System Properties tutorial .
Warning: Changing system properties is potentially dangerous and should be done with discretion. Many system properties are not reread after start-up and are there for informational purposes. Changing some properties may have unexpected side-effects.
根据我的经验,当您更改 *.proxyHost
属性时,您的系统可能会出现令人不快的问题。因此,我强烈不建议您为此任务更改系统属性。
更好地使用类似的东西:
//Proxy instance, proxy ip = 127.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);
和代理授权:
Authenticator authenticator = new Authenticator() {
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user",
"mypassword".toCharArray());
}
};
Authenticator.setDefault(authenticator);
现在回到主要问题:
A. 'proxy.mycompany1.local"只是示例。您可以使用任何主机名
B. 类 URL 通过 Socket 使用 java.net.PlainSocketImpl 类。它尝试解析代理主机名 'abcd'
,吞下错误并直接转到 google。试试看这段代码:
import java.net.*;
import java.io.*;
public class RequestURI {
public static void main(String[] args) {
int port = 8181;
long startTime = System.currentTimeMillis();
try {
// System.getProperties().setProperty("http.proxyHost", "abcd");
// System.getProperties().setProperty("http.proxyPort", Integer.toString(port));
URL url = new URL("http://google.com");
HttpURLConnection uc = (HttpURLConnection) url.openConnection();
int resp = uc.getResponseCode();
if (resp != 200) {
throw new RuntimeException("Failed: Fragment is being passed as part of the RequestURI");
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Run time in ms ="+ (System.currentTimeMillis() - startTime));
}
}
当您使用 setProperty
取消注释部分时,您可以看到运行时间更长。尝试解析主机名失败会增加执行时间。
关于java - 什么是 'proxy.mycompany1.local',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39673149/
我们使用预签名的 s3 url 来提供对存储在 s3 中的图像的网络访问。 我们用来生成预签名 url 的 java 代码类似于下面 String accessKey = ...; String se
我将 admin.war 文件部署到 tomcat 管理器后出现此错误。我也无法从管理器启动站点。现在我在尝试启动 catalina 时看到这个错误 Caused by: org.springfram
我有一个项目导入了一个命名空间为 MyCompany.Task 的 Nuget 包.我的项目文件的命名空间为 MyCompany.MyProjectName.Services . 我也有返回类型为 S
我真的很难修复下面的错误,因为我已经正确添加了 jar 和 在 gwt.xml文件 0 5:27:22.011 [ERROR] [myapp] Failed to create an instance
我正在尝试使用 Assembly.GetType("MyCompany.Class1.Class2") 从字符串中动态获取类型。 Assembly.GetType("MyCompany.Class1"
不要连接到服务器...这是上次gwt eclipse中的一个项目 在 gwt 中点击按钮: greetServer(textToServer, new
事实是,Solr 项目目录位于 MyProject 父目录内(但两者之间没有模块或任何 Maven 关系,只是 FS 方便)。我必须把它拿出来吗? $ mvn -DskipTests clean in
在 Developer Account 和 Xcode 中可以看到通配符和相关应用 ID 的 iOS Team Provisioning Profile。 我的问题是什么 iOS 团队配置文件与应用程
我正在尝试在 Windows7 上构建一个 maven java 程序,我的 java 版本是 1.7。我收到此错误: "Error: Could not find or load main clas
我有一个看起来像这样的类: public class Person { public class Address { private String line1;
我正在使用带有 javafx 的 Java Maven。 我刚刚创建了一个带有生成器的窗口并想运行它。 我的主类名称与 POM.xml 中的主类名称完全相同,但它不起作用。我需要它来做一个学习项目 我
因此,我尝试将自动填充凭据提供程序添加到我的应用程序中,但我仍然遇到签名错误。我遵循的步骤是: 添加新的自动填充凭据提供商目标 为该目标创建配置文件 在新创建的目标 > Info.plist > NS
我是一名优秀的程序员,十分优秀!