我能够在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();
}
}
答案 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 流已经到达