Java 尝试发出简单Http GET请求时连接超时
我正在尝试提出一个简单的GET请求:Java 尝试发出简单Http GET请求时连接超时,java,eclipse,http,proxy,http-get,Java,Eclipse,Http,Proxy,Http Get,我正在尝试提出一个简单的GET请求: https://www.google.com/search?q=stuff 我使用了Apache Http Lybrary: import java.io.IOException; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.client.Cli
https://www.google.com/search?q=stuff
我使用了Apache Http Lybrary:
import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHeaders;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class INRIX {
private final CloseableHttpClient httpClient = HttpClients.createDefault();
public static void main(String[] args) {
INRIX inrix = new INRIX();
try {
inrix.peticionGet();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inrix.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void close() throws IOException {
httpClient.close();
}
private void peticionGet() throws Exception {
HttpGet getRequest = new HttpGet("https://www.google.com/search?q=stuff");
// Request Headers
getRequest.addHeader("custom-key", "stuff");
getRequest.addHeader(HttpHeaders.USER_AGENT, "Googlebot");
try (CloseableHttpResponse response = httpClient.execute(getRequest)) {
// Get HttpResponse Status
System.out.println(response.getStatusLine().toString());
HttpEntity entity = response.getEntity();
Header headers = entity.getContentType();
System.out.println(headers);
if (entity != null) {
// return it as a String
String result = EntityUtils.toString(entity);
System.out.println(result);
}
} catch (ClientProtocolException e) {
System.out.println("ClientProtocolException");
e.printStackTrace();
} catch (IOException e) {
System.out.println("IOException");
e.printStackTrace();
}
}
}
和HttpURLConnection:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class INRIXURL {
public static void main(String[] args) {
INRIXURL inrix = new INRIXURL();
inrix.peticionGet();
}
public void peticionGet() {
String url = "https://www.google.com/search?q=stuff";
HttpURLConnection httpClient;
try {
httpClient = (HttpURLConnection) new URL(url).openConnection();
// optional default is GET
httpClient.setRequestMethod("GET");
// add request header
httpClient.setRequestProperty("User-Agent", "Mozilla/5.0");
int responseCode = httpClient.getResponseCode();
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + responseCode);
try (BufferedReader in = new BufferedReader(new InputStreamReader(httpClient.getInputStream()))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
response.append(line);
}
// print result
System.out.println(response.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这两种情况下,我都超时了
第一种情况下的错误:
org.apache.http.conn.HttpHostConnectException:连接到
www.google.com:443[www.google.com/216.58.201.132]失败:连接失败
超时:连接到
org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:156)
在
org.apache.http.impl.conn.poolighttpclientconnectionmanager.connect(poolighttpclientconnectionmanager.java:374)
在
org.apache.http.impl.execchain.MainClientExec.buildRoute(MainClientExec.java:393)
在
org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
在
org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
在
org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
在
org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
在
org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
在
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
在
org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
位于connCarPackage.INRIX.peticionGet(INRIX.java:53)处
connCarPackage.INRIX.main(INRIX.java:26)由以下原因引起:
java.net.ConnectException:连接超时:连接在
java.net.DualStackPlainSocketImpl.connect0(本机方法)位于
位于的java.net.DualStackPlainSocketImpl.socketConnect(未知源)
java.net.AbstractPlainSocketImpl.doConnect(未知源代码)位于
位于的java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
java.net.AbstractPlainSocketImpl.connect(未知源代码)位于
位于的java.net.PlainSocketImpl.connect(未知源)
位于的java.net.socksocketimpl.connect(未知源)
位于的java.net.Socket.connect(未知源)
org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:368)
在
org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 还有11个
对于第二种情况:
java.net.ConnectException:连接超时:连接在
java.net.DualStackPlainSocketImpl.connect0(本机方法)位于
位于的java.net.DualStackPlainSocketImpl.socketConnect(未知源)
java.net.AbstractPlainSocketImpl.doConnect(未知源代码)位于
位于的java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
java.net.AbstractPlainSocketImpl.connect(未知源代码)位于
位于的java.net.PlainSocketImpl.connect(未知源)
位于的java.net.socksocketimpl.connect(未知源)
位于的java.net.Socket.connect(未知源)
位于的sun.security.ssl.SSLSocketImpl.connect(未知源)
位于的sun.security.ssl.BaseSSLSocketImpl.connect(未知源)
sun.net.NetworkClient.doConnect(未知源)位于
sun.net.www.http.HttpClient.openServer(未知源代码)位于
sun.net.www.http.HttpClient.openServer(未知源代码)位于
sun.net.www.protocol.https.HttpsClient.(未知来源)位于
sun.net.www.protocol.https.HttpsClient.New(未知来源)位于
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(未知
来源)在
sun.net.www.protocol.http.HttpURLConnection.plainConnect0(未知
来源)在
sun.net.www.protocol.http.HttpURLConnection.plainConnect(未知)
来源)在
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知
来源)在
sun.net.www.protocol.http.HttpURLConnection.getInputStream0(未知
来源)在
sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知
源代码)位于java.net.HttpURLConnection.getResponseCode(未知源代码)
在
sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(未知
源代码)位于urlConnection.INRIXURL.peticionGet(INRIXURL.java:31)处
urlConnection.INRIXURL.main(INRIXURL.java:14)
我想我可能与我工作场所的代理配置有关,但如果是这样,或者我只是没有正确地执行请求,我不知道如何检查或修复它。我注意到我不能ping公司网络之外的站点或机器,但我不知道这是否相关
使用请求也可以很好地工作,我可以毫无问题地浏览。正如您所说:
我想我可能与我工作场所的代理配置有关,[…]
您应该询问您的IT如何使用您的公司代理(或检查您的网络设置,这可能会显示代理设置)
请看这里:
我刚在家试过,效果不错,可能就是这样。我只是想确定我的代码是正确的。