Java http GET不断获取null

时间:2016-09-26 18:05:49

标签: java

我能够在Postman中成功执行此GET命令,它返回我需要的各种标题。我使用基本身份验证进行第一次GET:

获取http://SERVER/qcbin/api/authentication/sign-in

我正在尝试用Java实现它,但没有任何东西回来。我一直都是空的。

有人可以告诉我我做错了什么吗?我无法弄清楚我的错误。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;


public class test2 {

public static void main(String[] args) {

    try {
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("myproxy", 8080));
        URL url = new URL ("http://SERVER/qcbin/api/authentication/sign-in");  

        byte[] credBytes = ("jsmith" + ":" + "abc123").getBytes();

        Base64.Encoder base64Encoder = Base64.getEncoder().withoutPadding();
        String encoding = base64Encoder.encodeToString(credBytes);

        HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);
        connection.setRequestMethod("GET");
        connection.setDoOutput(true);
        connection.setRequestProperty  ("Authorization", "Basic " + encoding);

在以下行之后将内容设置为null。

        InputStream content = (InputStream)connection.getInputStream();
        BufferedReader in   = 
            new BufferedReader (new InputStreamReader (content));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

在以下代码中,您正在从流中读取一行:

while ((line = in.readLine()) != null) {
    System.out.println(line);
}

可能是您从未从流中获得“新行”字符,这意味着服务器不会向您发送以新行字符结尾的数据?因此,当您的流中没有更多数据时,in.readLine()仍在等待该行尾字符?

尝试用以下代码替换该代码:

     // reads to the end of the stream 
     while((value = br.read()) != -1)
     {
        // converts int to character
        char c = (char)value;

        // prints character
        System.out.println(c);
     }

编辑:来自BufferedReader javadoc:

  

public String readLine()                   throws IOException读取一行文本。

     

一条线被认为是由换行符('\ n'),a中的任何一条终止   回车('\ r')或回车后立即回车   换行。

     

返回:包含行内容的String,而不是   包括任何行终止字符,如果结尾则为null   流已经到达