Java HttpUrlConnection引发连接被拒绝

Java HttpUrlConnection引发连接被拒绝,java,httpconnection,Java,Httpconnection,我知道关于这个话题有几个问题,但我没有找到答案 我正试图打开与本地服务器的连接,但连接一直被拒绝 我让服务器运行,并用浏览器和一个名为Postman的谷歌应用程序测试了连接,结果正常 它在打开连接时失败,好像没有什么可连接的地方。或者可能有什么东西阻塞了连接?我测试了防火墙和防病毒,没有运气 在Postman中测试URL会返回一个应该返回的用户 如果我将url替换为“”,它可以正常工作 这是我的密码: import java.io.BufferedReader; import java.io.I

我知道关于这个话题有几个问题,但我没有找到答案

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

我让服务器运行,并用浏览器和一个名为Postman的谷歌应用程序测试了连接,结果正常

它在打开连接时失败,好像没有什么可连接的地方。或者可能有什么东西阻塞了连接?我测试了防火墙和防病毒,没有运气

在Postman中测试URL会返回一个应该返回的用户

如果我将url替换为“”,它可以正常工作

这是我的密码:

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());


    }
}

我会胡乱猜出问题出在哪里。可能是IPv4/IPv6问题

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

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

    • 好吧,把
      http://localhost:8000/users/1
      在您的web浏览器中,您会得到什么?一个简单的
      连接被拒绝
      错误。不是你,是网站。另外,
      Url
      返回使用
      协议标识符(http://,https://)
      结束域(.com,.edu,.gov)
      的网站,这也是您出错的另一个原因。

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

      • 尝试使用其他计算机打开与本地服务器的连接
      代码很好,而且效果很好。现在问题一定出在运输或网络部分。我想说的是,您没有请求正确的服务器。如果您使用127.0.0.1而不是localhost,我认为您不会遇到问题。因此,我的问题是您在
      /etc/hosts
      C:\Windows\System32\drivers\etc\hosts
      中遇到问题


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

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

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

      如果简化标题没有帮助,我会在使用类似fiddler的浏览器时捕获流量,然后使请求看起来与此完全相同。

      您可以通过在响应头中设置
      访问控制允许源代码:
      属性,尝试在您尝试连接的API上实现CORS。

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


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

      并且浏览器位于运行Java的同一台计算机上?是的。。。我的猜测是有什么东西阻止了Java打开本地连接:POk,我刚刚尝试连接到,它工作了,,问题是:p我不知道为什么我在尝试连接到端口8000时连接被拒绝,这意味着你的web服务器没有在端口8000上运行。您能从浏览器访问相同的url吗?尝试了,但无效。我的url类似于“”。它可以从浏览器工作,但现在可以从java HttpUrlconnection工作。如果我将其更改为“”,它可以从java代码工作。不确定为什么使用“我的主机名”对我不起作用。好的,当您使用的是实际的IP而不是主机名时,“我的主机名”是否起作用?如果是这样,则将主机名转换为IP是一个问题,即DNS问题。另一种可能是“地址缓存”,如果可能缓存了
      我的主机名的失败查找尝试。在这里的最后一段中,您可以阅读更多关于它的内容:这真的很奇怪,我想这并不是您真正逃避java字符串的方式。你能提供实际的代码吗,这变得更有趣了!