Java 使用套接字的Http请求
我必须使用HTTP请求向一些嵌入了HTTP服务器的应用程序发送一些命令。我使用的是套接字,到目前为止我这样做了,但我有点迷路了:Java 使用套接字的Http请求,java,sockets,http,request,Java,Sockets,Http,Request,我必须使用HTTP请求向一些嵌入了HTTP服务器的应用程序发送一些命令。我使用的是套接字,到目前为止我这样做了,但我有点迷路了: URI uri = URI.create(rawData); try { String host = uri.getHost(); String path = uri.getRawPath( ); if (path == null || path.length( ) == 0) { p
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“
。协议编写是否正确?
谢谢您可以根据需要使用更高级别的JDK API,而不是较低级别的SocketAPI。请参考以下链接- 下面是一个带有HttpURLConnectionAPI的示例代码段-
String urlString = "http://myhost/mywebapp/myresource";
URL url= new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(timeout);
conn.setRequestMethod("GET");
conn.getResponseCode();
这就是我需要做的吗
没有
”http://somemessage“
什么是奇怪的URL。“/”后面的内容应该是(或包括)可解析的主机名或IP地址。如果您试图使用web浏览器获取这样的URL,它将不起作用
协议写得正确吗
当然,URL写得不正确。如果您尝试将所谓的URL与HttpURLConnection
或任何其他客户端HTTP API一起使用(请参见下文),它将无法工作
典型的格式良好的URL(在本例中为显式端口号)如下所示:
http://example.com:8080/path/to/resource
您还可以以相对形式表示URI;e、 g
http:/path/to/resource
或
甚至
resource
但这两种形式需要转换为绝对(URL)形式,然后才能被客户端库使用
但坦率地说,这是错误的做法。Java SE库和Apache HTTP库中都有客户端HTTP/HTTPS堆栈的现有实现。试图重新实现它们是浪费时间。你有没有特别的理由不使用
URLConnection
?@AlexR不是真的,我唯一应该考虑的是在不打开浏览器选项卡的情况下这样做,因为到目前为止它是这样做的:“Desktop.getDesktop().browse(URI.create(rawData));“我知道它不会工作,这是我任务的主要建议,不使用浏览器发送消息,只是作为后台任务,消息代表一些外部工具的命令,它们应该执行。@TudorR-如果你知道它不起作用,为什么还要尝试这样做?是什么让你认为你不能在后台使用(比如)HttpUrlConnection
发送请求?抱歉,您的评论对我来说毫无意义。目前,在我的应用程序中,使用Desktop.getDesktop().browse(URI.create(URL))处理像http://5195+JT+Equity5195JT这样的URL,但每次我发送请求时,它都会在我的浏览器中打开一个空选项卡,我必须在不打开它的情况下让它工作,因为它是无用的http协议只用于在我的应用程序和其他外部应用程序之间共享消息。我正在使用fiddler检查它是否已发送。这是一个非常大的项目,我是新手,所以我对此没有明确的想法,但在我看来,它只是用来共享信息的。我也有点困惑。那你为什么要使用Desktop.getDesktop()。浏览而不是HttpUrlConnection
?browse
打开浏览器窗口完全是预期的行为。如果您阅读javadoc,您将看到这是该调用的主要目的!!我还应该指出,“http://5195+JT+Equity5195JT”
不是有效的URL。正如我上面所说的,“//”
后面的东西。。。直到下一个“/”
应该是(或包括)有效的主机名或IP地址。你上面给我们看的东西显然是无效的。
resource