我在远程计算机上运行的协议缓冲服务说https://website/protobufService
在用户指南中,我只看到消息结构。喜欢
:
message Request {
required String name = 1;
required int id = 2,
........
}
message Response {
optional int result =1;
enum Code {
val1 = 1;
val2 = 2;
}
optional Code = 2;
}
我不确定如何用Java编写客户端代码来使用这项服务?
是否有关于为Protobuf服务编写客户端代码的指南?
提前感谢。 - JE
答案 0 :(得分:1)
Protobufs仅指定如何将消息转换为字节并返回,而不是如何通过网络发送消息。特别是,没有通过HTTP发送protobufs的标准方法。您尝试使用的特定服务的文档需要准确指定它希望如何发送消息。
但是,通常情况下,您会将HTTP POST发送到带有编码Request
protobuf作为其正文的URL,并且它将使用编码的Response
protobuf进行响应。您应该能够使用任何旧的HTTP库来执行此操作;只需将编码的Request
作为字节给出,并将响应字节解码为Response
。
答案 1 :(得分:1)
我遇到了同样的问题。我已经为我的网络服务编写了下面的客户端。幸运的是它确实返回了输出。不幸的是我认为它不是proto-buf格式。我希望以protobuff格式看到它。我不知道protobuff格式是怎么样的。你可以想看看下面的链接: - https://spring.io/blog/2015/03/22/using-google-protocol-buffers-with-spring-mvc-based-rest-services
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpRestClient {
// http://localhost:8080/customers/
public static void main(String[] args) {
try {
URL url = new URL("http://localhost:8080/customers/1");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/x-protobuf");
conn.setRequestProperty("Accept", "application/x-protobuf");
String contentType = conn.getContentType();
System.out.println(contentType);
System.out.println("---------------------------------------------------------------------");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " +
conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new
InputStreamReader((conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
Object response = output;
System.out.println(response);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果有人有更好的建议请知道。这就是我的输出结果: -
服务器输出....
克里斯 理查森* crichardson@email.com
正如您所看到的,它不是protobuff格式。