【发布时间】:2014-12-09 03:58:37
【问题描述】:
我需要一个 api 来执行八位字节流,它没有长度。它只是一个实时数据流。我遇到的问题是,当我提出请求时,它似乎试图等待内容结束,然后再将信息读入输入流,但是它没有看到内容的结束和 NoHttpResponse 异常的超时。以下是我的代码的简化版本:
private static HttpPost getPostRequest() {
// Build uri
URI uri = new URIBuilder()
.setScheme("https")
.setHost(entity.getStreamUrl())
.setPath("/")
.build();
// Create http http
HttpPost httpPost = new HttpPost(uri);
String nvpsStr = "";
Object myArray[] = nvps.toArray();
for(int i = 0; i < myArray.length; i ++) {
nvpsStr += myArray[i].toString();
if(i < myArray.length - 1) {
nvpsStr += "&";
}
}
// Build http payload
String request = nvpsStr + scv + streamRequest + "\n\n";
// Attach http data
httpPost.setEntity(new StringEntity(URLEncoder.encode(request,"UTF-8")));
return httpPost;
}
// Where client is simply
// private static final CloseableHttpClient client = HttpClients.createDefault();
private static runPostRequest (HttpPost request) {
CloseableHttpResponse response = client.execute(request);
try {
HttpEntity ent = response.getEntity();
InputStream is = ent.getContent();
DataInputStream dis = new DataInputStream(is);
// Only stream the first 200 bytes
for(int i = 0; i < 200; i++) {
System.out.println(( (char)dis.readByte()));
}
} finally {
response.close();
}
}
【问题讨论】:
-
这对我来说很好用。也许向我们展示您的服务器端。
-
我无法控制服务器端代码。这只是我用来传输股票报价的第 3 方 API。
-
你能给我们举个例子吗?我尝试了一个简单的 servlet,它每隔几秒就会传输几个字节,并且接收内容没有问题。
-
不幸的是,我使用的 api 让我签署了 NDA。我可能会在这个问题上与他们的工作人员核实。感谢您验证此代码的有效性。
标签: java httpclient apache-httpclient-4.x apache-commons-httpclient