连接失败:使用Java,Apache HTTP客户端测试API的超时

连接失败:使用Java,Apache HTTP客户端测试API的超时

问题描述:

我正在尝试使用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()); 
     } 

    } 
} 

如果相同的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