获取java.net.UnknownHostException,can';点击任何网站,但可以正常浏览

获取java.net.UnknownHostException,can';点击任何网站,但可以正常浏览,java,network-programming,corporate,Java,Network Programming,Corporate,我正试图编写一个程序,通过HTTP将XML请求发送到供应商服务器,我使用了来自的示例代码 然后我在运行代码时得到了错误java.net.UnknownHostException 然后我尝试ping供应商主机,然后www.google.com。它们都不起作用。我得到: “ping请求找不到主机www.google.com” 我在使用公司网络。我可以正常地浏览、下载和与供应商服务器进行通信。知道如何解决这个问题吗?您应该检查系统的网络设置。您需要确认已设置DNS服务器和默认网关 如果您的网络配置通常

我正试图编写一个程序,通过HTTP将XML请求发送到供应商服务器,我使用了来自的示例代码

然后我在运行代码时得到了错误
java.net.UnknownHostException
然后我尝试ping供应商主机,然后
www.google.com
。它们都不起作用。我得到:

“ping请求找不到主机www.google.com”


我在使用公司网络。我可以正常地浏览、下载和与供应商服务器进行通信。知道如何解决这个问题吗?

您应该检查系统的网络设置。您需要确认已设置DNS服务器和默认网关


如果您的网络配置通常正确,您可以尝试使用命令
nslookup google.com 8.8.8
。这将尝试使用谷歌的一个公共dns服务器解析谷歌的ip。

您可以毫无问题地浏览网络,因为您的浏览器必须配置为使用代理。我们可以将JVM配置为使用相同的代理,然后成功地打开HTTP连接

打开web浏览器的网络设置并记下代理服务器和端口

对于Firefox,进入工具>选项>高级>网络>连接>设置

现在,在打开HTTP连接之前,在Java程序中设置JVM以使用此代理

System.getProperties().put("proxySet", "true");
System.getProperties().put("http.proxyHost", "10.1.0.11");
System.getProperties().put("http.proxyPort", "8080");
设置了上述属性后,您的程序应该能够打开连接。如果您的代理需要身份验证,那么您还必须使用
ProxyAuth
对象设置默认的
Authenticator


理想情况下,您应该在程序退出之前清除这些属性。

您很可能在防火墙后面


您的防火墙阻止您使用诸如Jsoup之类的web抓取工具连接到internet。如果您在公司网络中,请尝试连接到intranet站点。

您的公司网络可能没有用于外部域的DNS,而解析是通过代理完成的。所以,你没有DNS!你需要通过一个代理来完成你的HTTP工作。你真的应该看看Spring和JaxB,这比教程中的演示要简单得多。Google了解Spring的RestTemplate以及如何使用JaxB进行marshall/unmarshall。当我尝试nslookup时,DNS请求超时。我在wifi的TCP/IP设置中使用了自动获取。不确定如果我需要更改DNS,应该使用什么样的DNS。@SeanYang15查看我对您的问题的评论。基本上,你不能ping,必须通过代理。拉维和@fge你是对的。浏览器使用在公司计算机上完成的代理设置,并使用自动配置脚本。有没有办法让程序也使用scirpt?因为我在脚本中看到了不同情况下的多个主机,我不确定我应该在这里使用哪一个。另一个注意:由于代理脚本的第一部分有“if((host==“127.0.0.1”)| |(host==“localhost”){return“DIRECT”;“我尝试ping 127.0.0.1,得到了回复。但是我添加了System.getProperties().put(“http.proxyHost”,“127.0.0.1”);在我的程序中,它没有解决问题127.0.0.1和localhost是环回地址,即它们指向您自己的计算机。因此,将它们设置为代理主机不会有任何帮助。您是否看到脚本中配置的任何其他主机或ip地址?好的,我在我的PAC文件中找到了以下内容“函数FindProxyForURL(url,host){if(((url.substring(0,5)=“http:”)| |(url.substring(0,4)=“ftp:”)| |(url.substring(0,6)=“https:”){return“DIRECT”;“这意味着http请求没有通过代理。对吗?您错过了not
操作符。
如果(!(
表示如果使用的协议不是http、ftp或https,则不要使用代理。其他协议中有什么?