简体   繁体   English

如何使用Apache HttpClient使用代理在Java中加载URL?

[英]How to load a URL in Java using a proxy using Apache HttpClient?

Hi I am trying to test the response time by using URL of a server in JAVA using Apache HttpClient 嗨,我正在尝试使用Apache HttpClient在JAVA中使用服务器的URL来测试响应时间

here is my code 这是我的代码

    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();
    }

MY PROBLEM is I can access the www.google.com from my browser but When I try to execute that logic is giving This exception 我的问题是我可以从浏览器访问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)

Try the following 尝试以下

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);
        }
    }
}

I formated the program this way so that if you don't have a proxy you can comment out that line and everything else will still work. 我以这种方式格式化程序,以便如果您没有代理,可以注释掉该行,其他所有内容仍然可以使用。 If you do it with making a var Proxy proxy = new Proxy(...) then you have to comment multi lines. 如果使用var Proxy proxy = new Proxy(...)来完成此操作,则必须注释多行。

Since you are using a library. 由于您正在使用库。 I would recommend using jsoup . 我建议使用jsoup The below code has been tested. 下面的代码已经过测试。

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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用Apache HttpClient的Web代理通过Java通信失败 - Java communication fails through web proxy using Apache HttpClient 使用Java 1.4中的Apache httpclient读取URL内容 - Reading URL content using Apache httpclient in Java 1.4 Apache httpclient 不支持使用 setProxy 的代理设置 - Apache httpclient not honouring proxy setting using setProxy 如何使用apache httpclient 4.3.5将文件发布到受保护的URL - How to post a file to a protected URL using apache httpclient 4.3.5 Java Apache HttpClient-代理不响应 - Java Apache HttpClient - Proxy not responding 在java中使用Apache HttpClient时如何修复“连接重置” - How to fix "Connection Reset" when using Apache HttpClient in java 如何使用 Java Apache HttpClient 正确发出 POST 请求? - how to properly make a POST request using Java Apache HttpClient? 如何在java中使用代理获取URL连接? - How to get URL connection using proxy in java? 如何使用Apache HttpClient 4.3.4通过代理测试与服务器SSL端口的连接? - How to test connection to server SSL port via proxy using Apache HttpClient 4.3.4? 在Java中,在发送JSON POST时使用HttpPost(apache commons HttpClient) - 我应该对身体进行URL编码吗? - In Java, using HttpPost (apache commons HttpClient) when sending JSON POST - should I URL encode the body?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM