2017-04-12 59 views
0

我正在嘗試使用Java測試API。我正在使用Java 8,Apache HTTP客戶端4.5.3來測試它。我嘗試了許多不同的方法來使用Java .net類,Apache HTTP客戶端進行測試,但每次都是相同的問題;連接失敗:使用Java,Apache HTTP客戶端測試API的超時

在線程異常 「主」 org.apache.http.conn.HttpHostConnectException:連接到 api.github.com:443 [api.github.com/192.30.253.116, api.github.com /192.30.253.117]失敗:連接超時:在 org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159)連接

每次我得到超時。但是,如果我在瀏覽器中使用相同的URL,我會得到結果。

有人可以幫我指出問題嗎?無論是設置問題還是代碼問題?

嘗試幾乎所有可用的互聯網上的代碼。我是API測試的初學者,並沒有深入瞭解HTTP工作流程的知識。

import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpUriRequest; 
import org.apache.http.impl.client.HttpClientBuilder; 

import java.io.IOException; 
import java.net.*; 

public class API { 


    public static void main(String args[]) throws IOException, URISyntaxException { 


     HttpUriRequest request = new HttpGet("https://api.github.com"); 

     // When 
     HttpResponse response = HttpClientBuilder.create().build().execute(request); 

     System.out.println(response.getStatusLine().getStatusCode()); 
    } 
} 

使用Java .NET打包

import java.io.IOException; 
import java.net.*; 

public class API { 


    public static void main(String args[]) throws IOException, URISyntaxException { 


     URL url = new URL("http://maps.googleapis.com/maps/api/geocode/json?address=chicago&sensor=false"); 
     //URL url = uri.toURL(); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("Accept", "application/xml"); 

     if (conn.getResponseCode() != 200) { 
      throw new RuntimeException("HTTP error code : " 
        + conn.getResponseCode()); 
     } 

    } 
} 

回答

1

如果相同的URL在瀏覽器上,只有三種可能的工作。

  1. 該URL需要頭像User-Agent。您可以設置所需的請求,如下所示: request.setHeader("User-Agent", "Mozilla");

  2. 您處於公司或受限環境中,需要代理才能連接到外部URL。您的瀏覽器可能已經設置爲使用代理服務器。在這種情況下,您需要將代理憑證傳遞給http客戶端API。

    例子:https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientProxyAuthentication.java

  3. 所有傳出的請求被阻擋在您的環境中通過防火牆或東西。在這種情況下,您需要讓您的網絡管理員允許網絡連接。

+0

我試過SetHeader方法,但沒有工作,我得到相同的錯誤信息。我沒有在Apache HttpClient 4.5.3中找到getCredentialsProvider方法。我的公司不允許更改網絡連接,但稍後我會在個人計算機上嘗試。希望這會起作用,但前兩個選項並不奏效。 – Snehal

+0

使用http代理的示例進行編輯。但是,你知道你的環境是否需要代理連接到外部URL? – alpeshpandya

+0

我檢查我的瀏覽器設置,我們沒有使用任何代理連接外部網絡。 – Snehal