我必须使用HTTP请求向嵌入了HTTP服务器的某些应用程序发送一些命令。我使用的是套接字,到目前为止,我已经这样做了,但是我有点迷路了:
URI uri = URI.create(rawData);
try {
String host = uri.getHost();
String path = uri.getRawPath( );
if (path == null || path.length( ) == 0) {
path = "/";
}
String protocol = uri.getScheme( );
int port = uri.getPort( );
if (port == -1) {
if (protocol.equals("http")) {
port = 80; // http port
}
else if (protocol.equals("https")) {
port = 443; // https port
}
}
Socket socket = new Socket( host, port );
PrintWriter request = new PrintWriter( socket.getOutputStream() );
request.print( "GET " + path + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
request.flush( );
这就是我需要做的吗?rawData的示例是"http://somemessage"
。协议是否正确编写?谢谢
这就是我需要做的吗?
不。
您需要处理响应,处理可能会收到的各种响应非常复杂。
您处理HTTPS的方式是完全错误的。您需要处理SSL连接协商...,如果尝试使用普通套接字进行此操作,则需要进行大量的编码。
rawData的示例是
"http://somemessage"
什么是奇怪的网址。“ //”后面的内容应为(或包括)可解析的主机名或IP地址。如果您尝试使用网络浏览器获取类似的URL,它将无法正常工作。
协议编写正确吗?
当然,URL书写不正确。如果您尝试将所谓的URL与HttpURLConnection
或任何其他客户端HTTP API(请参见下文)一起使用,则将无法正常工作!
典型的格式正确的URL(在这种情况下,具有明确的端口号)如下所示:
http://example.com:8080/path/to/resource
您也可以用相对形式来表示URI。例如
http:/path/to/resource
要么
http:relpath/to/resource
甚至
resource
但是必须先将这两种形式转换为绝对(URL)形式,然后才能由客户端库使用。
但是坦率地说,这是错误的处理方式。Java SE库以及Apache HTTP库中都有客户端HTTP / HTTPS堆栈的现有实现。尝试重新实现它们是浪费时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句