Proxy Apache HttpClient中的代理用户名/密码

Proxy Apache HttpClient中的代理用户名/密码,proxy,httpclient,apache-httpcomponents,Proxy,Httpclient,Apache Httpcomponents,我希望通过ApacheHttpClient 4.1.2对yahoo货币汇率服务执行GET操作,但当我通过公司防火墙访问时,会收到UknownHostException。不过,当我在家尝试时(当然没有任何代理配置),代码运行良好 此外,URL将在我的浏览器上打开,但无法从命令提示下ping 下面是一个示例URL 编辑2:以下是我用来连接雅虎金融服务的完整代码: GetRate.java public class GetRate { public static void main(Strin

我希望通过ApacheHttpClient 4.1.2对yahoo货币汇率服务执行GET操作,但当我通过公司防火墙访问时,会收到UknownHostException。不过,当我在家尝试时(当然没有任何代理配置),代码运行良好

此外,URL将在我的浏览器上打开,但无法从命令提示下ping

下面是一个示例URL

编辑2:以下是我用来连接雅虎金融服务的完整代码:

GetRate.java

public class GetRate {
    public static void main(String[] args) {
       final String FROM = "USD";
       final String TO = "INR";

       ArrayList<String> paramsList = new ArrayList<String>();
            paramsList.add(FROM + TO);
            System.out.println("Tracking "+ TO + " vs. " + FROM + " Exchange Rate...");

       try {
                double _new = new Double(RestClient.doGet(paramsList));
           double _old = _new;

           while(true) {
               _new = new Double(RestClient.doGet(paramsList));
                    if(_old != _new)
                        _old = _new;
               Thread.sleep(1000);
            }
         } catch (HttpException e) {
                  e.printStackTrace();
         } catch (IOException e) {
        e.printStackTrace();
         } catch (URISyntaxException e) {
        e.printStackTrace();
         } catch (InterruptedException e) {
        e.printStackTrace();
         }
        }
}
public class RestClient {
public static final int HTTP_OK = 200;
public static final String SERVER_URL = "http://quote.yahoo.com/d/quotes.csv";
public static final String DEFAULT_ENCODING = "UTF-8";

public static String doGet(final ArrayList<String> params) throws HttpException,
        IOException, URISyntaxException {
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpConnectionParams
            .setConnectionTimeout(httpClient.getParams(), 10000);

    httpClient = proxyConfig(httpClient);

    HttpHost targetHost = new HttpHost(SERVER_URL);
    String urlParams = "?f=l1";
    if(!params.isEmpty()) {
        for(String param : params) {
            String paramString = "s=" + URLEncoder.encode(param, DEFAULT_ENCODING) + "=X";
            urlParams += (urlParams.length() > 1) ? ("&" + paramString) : paramString;
        }
    }
    HttpGet httpget = new HttpGet(urlParams);

    System.out.println("Final URL: " + httpget.getURI().toString());

    HttpResponse response = httpClient.execute(targetHost, httpget);
    HttpEntity entity = response.getEntity();
    InputStream instream = entity.getContent();
    return read(instream);
}

private static String read(InputStream in) throws IOException {
    StringBuilder sb = new StringBuilder();
    BufferedReader r = new BufferedReader(new InputStreamReader(in), 1000);
    for (String line = r.readLine(); line != null; line = r.readLine()) {
        sb.append(line + ",");
    }
    in.close();
    return sb.toString().substring(0, sb.length() - 1);
}

     /** Proxy config Approach 1 */
private static DefaultHttpClient proxyConfig(DefaultHttpClient httpClient) {    
    AuthScope auth = new AuthScope("proxy.tcs.com", 8080);
    Credentials creds = new UsernamePasswordCredentials("USER_NAME", "PASSWORD");
    httpClient.getCredentialsProvider().setCredentials(auth, creds);

    return httpClient;
}
}        for(String param : params) {
             String paramString = "s=" + URLEncoder.encode(param, DEFAULT_ENCODING) + "=X";
             urlParams += (urlParams.length() > 1) ? ("&" + paramString) : paramString;
     }
 }

 HttpGet httpget = new HttpGet(urlParams);
 HttpResponse response = httpClient.execute(targetHost, httpget);
 HttpEntity entity = response.getEntity();
 InputStream instream = entity.getContent();
谢谢,
德博吉特

编辑1:
进近1的Stacktrace:

java.net.UnknownHostException: http://quote.yahoo.com/d/quotes.csv
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(Unknown Source)
at java.net.InetAddress.getAddressFromNameService(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:242)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:130)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at ws.client.RestClient.doGet(RestClient.java:48)
at ws.client.GetRate.main(GetRate.java:22)
进近2的Stacktrace:

Exception in thread "main" java.lang.NumberFormatException: For input string: "<HEAD><TITLE>Proxy Authorization Required</TITLE></HEAD>,<BODY BGCOLOR="white" FGCOLOR="black"><H1>Proxy Authorization Required</H1><HR>,<FONT FACE="Helvetica,Arial"><B>,Description: Authorization is required for access to this proxy</B></FONT>,<HR>,<!-- default "Proxy Authorization Required" response (407) -->,</BODY>,"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.valueOf(Unknown Source)
at java.lang.Double.<init>(Unknown Source)
at ws.client.GetRate.main(GetRate.java:22)
线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“需要代理授权,需要代理授权”
,说明:访问此代理需要授权,
位于sun.misc.FloatingDecimal.readJavaFormatString(未知源) 位于java.lang.Double.valueOf(未知源) 位于java.lang.Double。(未知源) 位于ws.client.GetRate.main(GetRate.java:22)
问题是,我不确定代码从哪里获取HTML作为输入,以及为什么。

您是否使用“PROXY\u HOST”作为代理构造函数?如果是这样,则必须在浏览器配置中使用代理主机。代理_端口也是如此


由于防火墙的原因,您将无法从公司ping Yahoo,但您可以通过浏览器进行访问,因为它配置为使用代理服务器

我正在使用浏览器中的代理信息。代理主机只是一个占位符(有点像)。好的,很抱歉我的问题;)。我看不到您在执行调用之前设置了代理配置。在这里检查一个如何做的例子:我已经做了。。我的实现基于那里的信息。但是我无法在那里查找某些方法,例如
client.getState()
。我假设
client
指的是
HttpClient
DefaultHttpClient
,但在这两个类中都没有这样的方法。由于未正确设置HttpHost,因此出现了第一个错误。示例中设置的方式是
HttpHost targetHost=new-HttpHost(“www.verisign.com”,443,“https”)。您应该放置如下内容:
HttpHost targetHost=newhttphost(“quote.yahoo.com”,80,“http”)
按照指示在
HttpHost
中进行了更改,但错误保持不变。
Exception in thread "main" java.lang.NumberFormatException: For input string: "<HEAD><TITLE>Proxy Authorization Required</TITLE></HEAD>,<BODY BGCOLOR="white" FGCOLOR="black"><H1>Proxy Authorization Required</H1><HR>,<FONT FACE="Helvetica,Arial"><B>,Description: Authorization is required for access to this proxy</B></FONT>,<HR>,<!-- default "Proxy Authorization Required" response (407) -->,</BODY>,"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.valueOf(Unknown Source)
at java.lang.Double.<init>(Unknown Source)
at ws.client.GetRate.main(GetRate.java:22)