【问题标题】:Java HttpUrlConnection throws Connection RefusedJava HttpUrlConnection 抛出 Connection Refused
【发布时间】:2014-09-20 01:41:40
【问题描述】:

我知道关于这个主题有几个问题,但我没有在其中任何一个中找到答案。

我正在尝试打开与本地服务器的连接,但连接一直被拒绝。

我的服务器正在运行,我测试了与浏览器和一个名为 Postman 的 Google 应用的连接,它可以正常工作。

打开连接时失败,好像没有什么可以连接的。或者可能有什么东西阻止了连接?我测试了防火墙和杀毒软件,没有运气。

在 Postman 中测试 URL 会返回一个用户,因为它应该......

如果我将 url 替换为“http://www.google.com”就可以了。

这是我的代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
 *
 * @author Gabriel
 */
public class HttpConnection {

    public HttpConnection() {

    }

    public void makeRequest() throws MalformedURLException, IOException {

        String url = "http://localhost:8000/users/1";

    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    // optional default is GET
    con.setRequestMethod("GET");

    //add request header
    con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36");
        con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        con.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
        con.setRequestProperty("Accept-Language", "en-US,en;q=0.8,es;q=0.6");
        con.setRequestProperty("Connection", "keep-alive");
        con.setRequestProperty("Host", "localhost:8000");

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'GET' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());


    }
}

【问题讨论】:

  • 浏览器与您运行 Java 的计算机位于同一台计算机上?
  • 是的......我猜是有什么东西阻止了 Java 打开本地连接:P
  • 好的,我试过只连接到localhost,它可以工作,问题是localhost:8000:p 我不知道为什么
  • 由于某种原因,当我尝试连接到端口 8000 时,连接被拒绝
  • 这意味着您的网络服务器没有在 8000 端口上运行。您可以从浏览器访问相同的 url 吗?

标签: java httpconnection


【解决方案1】:

我有类似的代码正在运行,但我的请求标头要简单得多。基本上只是:

con.setRequestProperty("User-Agent", "Mozilla/5.0");

如果简化标头没有帮助,我会在将您的浏览器与 fiddler 之类的东西一起使用时捕获流量,然后使请求看起来完全一样。

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题。使用它而不是本地主机:

    http://[::1]:8000/index.php

    【讨论】:

      【解决方案3】:

      我会大胆猜测可能是什么问题。可能是 IPv4/IPv6 问题。

      如果是这样,这里有两种可能的解决方案

      • 如果服务器仅监听 ipv6 地址,请将其更改为监听 ipv4。
      • 如果服务器正在侦听 ipv4,则强制 Java 使用 ipv4 java.net.preferIPv4Stack=true

      【讨论】:

      • 试过了,但没用。我的网址类似于“my-host-name:51234/abc”。它适用于浏览器,但现在适用于 java HttpUrlconnection。
      • 如果我将其更改为“locahost:8080/abc”,它可以在 java 代码中运行。不知道为什么使用“我的主机名”对我不起作用。
      • 好的,当您拥有实际 IP 而不是主机名 my-host-name 时是否有效?如果是这样,则将主机名转换为 IP 是一个问题,即 DNS 问题。
      • 另一种可能性可能是“地址缓存”,如果可能缓存了对 my-host-name 的失败查找尝试。您可以在此处的最后一段中阅读有关它的更多信息:docs.oracle.com/javase/7/docs/api/java/net/doc-files/…
      • 这真的很奇怪,我想这不是你真正逃避java字符串的方式。能否提供实际代码,这更有趣!
      【解决方案4】:

      您可以通过在响应标头中设置access-control-allow-origin:* 属性来尝试在您尝试连接的API 上实现CORS。

      【讨论】:

        【解决方案5】:

        代码很好,效果很好。现在问题肯定出在运输或网络部分。我的意思是你没有请求正确的服务器。如果您使用 127.0.0.1 而不是 localhost 我认为您不会遇到问题。所以,我的客人会是你在/etc/hostsC:\Windows\System32\drivers\etc\hosts 有问题。

        我建议您尝试一个简单的测试:ping 主机名并检查 ip 地址是否正确的输出。

        【讨论】:

          【解决方案6】:

          好吧,将http://localhost:8000/users/1 输入您的网络浏览器,您会得到什么?一个简单的Connection Refused 错误。不是你,是网站。此外,Url 使用Protocol Identifiers(http://, https://)Ending Domains(.com, .edu, .gov) 返回网站,这也是您收到错误的另一个原因。

          【讨论】:

            【解决方案7】:

            您提到您正在打开与“本地服务器”的连接 我假设您在托管服务器的同一台计算机上执行此操作?

            • 尝试使用另一台计算机打开与本地服务器的连接。

            【讨论】:

              猜你喜欢
              • 2023-04-03
              • 1970-01-01
              • 2015-07-07
              • 2013-04-20
              • 1970-01-01
              • 1970-01-01
              • 2020-10-14
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多