2014-01-30 72 views
0

我有个特定CURL请求URL如下所示传递用户名/密码卷曲

卷曲-XGET -ukey:秒https://api.calltrackingmetrics.com/api/v1/accounts/-your-account/calls.json

我有密钥和秒(秘密) 跟我。请帮助我使用Apache HTTP Client 4.3版将相同的CURL调用转换为java中的HTTP请求。当我尝试编写一段代码示例时,出现以下异常。

Exception in thread "main" org.apache.http.conn.HttpHostConnectException: Connect to api.calltrackingmetrics.com:443 [api.calltrackingmetrics.com/166.78.112.169, api.calltrackingmetrics.com/198.61.173.12] failed: Connection refused: connect 
    at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:138) 
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314) 
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) 
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85) 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) 
    at com.test.callmetrics.mains.CallMetricsTester.main(CallMetricsTester.java:35) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:239) 
    at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:118) 
    ... 10 more 

这是我的Java代码

public static void main(String[] args) throws Exception { 
     // TODO Auto-generated method stub 

     CloseableHttpClient httpclient = HttpClients.createDefault(); 
     try{ 
      CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
      AuthScope authscp = new AuthScope("api.calltrackingmetrics.com", 443); 
      credentialsProvider.setCredentials(authscp, new UsernamePasswordCredentials("mykey","mysecret")); 
      HttpClientContext localContext = HttpClientContext.create(); 
      localContext.setCredentialsProvider(credentialsProvider); 
       HttpGet httpGet = new HttpGet("https://api.calltrackingmetrics.com/api/v1/accounts/myaccout/calls.json"); 
     CloseableHttpResponse response1 = httpclient.execute(httpGet); 
     // The underlying HTTP connection is still held by the response object 
     // to allow the response content to be streamed directly from the network socket. 
     // In order to ensure correct deallocation of system resources 
     // the user MUST either fully consume the response content or abort request 
     // execution by calling CloseableHttpResponse#close(). 

     try { 
      System.out.println(response1.getStatusLine()); 
      HttpEntity entity1 = response1.getEntity(); 
      // do something useful with the response body 
      // and ensure it is fully consumed 
      EntityUtils.consume(entity1); 
     } finally { 
      response1.close(); 
      } 
     } 
     finally { 
     httpclient.close(); 
    } 
    } 
} 

请帮我这个

回答

2

你并不需要创建一个情境 - 你可以在你的凭据提供简单地传递到客户端,当你创建它时:

CredentialsProvider provider = new BasicCredentialsProvider(); 
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("mykey","mysecret"); 
AuthScope authscp = new AuthScope("api.calltrackingmetrics.com", 443); 
provider.setCredentials(authscp, credentials); 
HttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).build(); 

HttpResponse response = client.execute(new HttpGet("https://api.calltrackingmetrics.com/api/v1/accounts/myaccout/calls.json")); 
int statusCode = response.getStatusLine().getStatusCode(); 
assertThat(statusCode, equalTo(HttpStatus.SC_OK)); 

这应该解决问题。 希望它有帮助。

相关问题