如何使用ApacheHttpClient使用代理在Java中加载URL?
嗨,我正试图通过使用ApacheHttpClient在JAVA中使用服务器的URL来测试响应时间 这是我的密码如何使用ApacheHttpClient使用代理在Java中加载URL?,java,http,url,httpclient,ping,Java,Http,Url,Httpclient,Ping,嗨,我正试图通过使用ApacheHttpClient在JAVA中使用服务器的URL来测试响应时间 这是我的密码 HttpClient client = new HttpClient(); HttpMethod method = new HeadMethod("http://www.google.com/"); StopWatch sWatch = new StopWatch(); try { sWatch.start(); client
HttpClient client = new HttpClient();
HttpMethod method = new HeadMethod("http://www.google.com/");
StopWatch sWatch = new StopWatch();
try {
sWatch.start();
client.executeMethod(method);
System.out.println(sWatch.toString());
}catch(Exception e)
{
e.printStackTrace();
}
我的问题是我可以从我的浏览器访问www.google.com
,但当我尝试执行该逻辑时,会出现此异常
java.net.ConnectException: Connection timed out: connect
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:280)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:122)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at com.sampl.DAP.CheckResponse.checkStatus(CheckResponse.java:31)
at com.sampl.DAP.CheckResponse.main(CheckResponse.java:44)
java.net.ConnectException:连接超时:连接
位于java.net.TwoStacksPlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
位于java.net.socksocketimpl.connect(socksocketimpl.java:391)
位于java.net.Socket.connect(Socket.java:579)
位于java.net.Socket.connect(Socket.java:528)
位于java.net.Socket。(Socket.java:425)
位于java.net.Socket。(Socket.java:280)
位于org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80)
位于org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:122)
位于org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
位于org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
位于org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
位于org.apache.commons.httpclient.httpclient.executeMethod(httpclient.java:397)
位于org.apache.commons.httpclient.httpclient.executeMethod(httpclient.java:323)
位于com.sampl.DAP.CheckResponse.checkStatus(CheckResponse.java:31)
位于com.sampl.DAP.CheckResponse.main(CheckResponse.java:44)
尝试以下操作
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author djc39_000
*/
public class URLBrowser {
public static void main(String[] args) {
try {
URLConnection uc = new URL("https://www.google.com").openConnection(
new Proxy(Proxy.Type.HTTP, new InetSocketAddress("my.proxy.example.com", 3128))
);
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (MalformedURLException ex) {
Logger.getLogger(URLBrowser.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(URLBrowser.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
我以这种方式格式化了程序,这样,如果你没有代理,你就可以注释掉那一行,其他一切都可以正常工作。如果使用var Proxy Proxy=newproxy(…),则必须注释多行。因为您使用的是库。我建议使用。下面的代码已经过测试
long startTime = System.nanoTime();
Response response= Jsoup.connect(location)
.ignoreContentType(true)
.userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
.referrer("http://www.google.com")
.timeout(12000)
.followRedirects(true)
.execute();
long endTime = System.nanoTime();
是否存在流量路由通过的代理服务器?。如果是这样,请尝试在代码中添加代理设置。这是一个非常旧的http组件版本。考虑升级。@ RAKESH:是的,我有代理服务器来路由流量。如果是这样,那么如何在我的代码中添加代理设置呢plz@SotiriosDelimanolis升级?如何实现?请详细说明
InetSocketAddress(“my.proxy.example.com”,3128)
plz?”此类实现IP套接字地址(IP地址+端口号),也可以是一对(主机名+端口号),在这种情况下,将尝试解析主机名。如果解析失败,则表示该地址未解析,但在某些情况下(如通过代理连接)仍可使用。”