有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

httpconnection Java HttpUrlConnection抛出连接被拒绝

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

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

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

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

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

如果我用“http://www.google.com”替换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());


    }
}

共 (6) 个答案

  1. # 1 楼答案

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

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

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

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

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

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

  3. # 3 楼答案

    我面临着完全相同的问题。使用此选项而不是本地主机:

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

  4. # 4 楼答案

    那么,把http://localhost:8000/users/1放进你的网络浏览器,你会得到什么?一个简单的Connection Refused错误。不是你,是网站。另外,Url返回使用Protocol Identifiers(http://, https://)Ending Domains(.com, .edu, .gov)的网站,这也是出现错误的另一个原因

  5. # 5 楼答案

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

  6. # 6 楼答案

    代码很好,效果也很好。现在问题一定出在运输或网络部分。我想说的是,您没有请求正确的服务器。如果您使用127.0.0.1而不是localhost,我认为您不会遇到问题。因此,我的嘉宾将是您在/etc/hostsC:\Windows\System32\drivers\etc\hosts中遇到问题

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