java - Curl 发送空白 header (测试 Java Web 服务器)

标签 java curl

我正在通过从 cURL 发送请求来测试我的网络服务器。当我发送此命令时:

curl -H "_ADD_CLASS*21112*ab*https://somewebsite" 127.0.0.1:12345 

到我的服务器,我在我的 Java Socket 中得到这个

GET / HTTP/1.1
User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
Host: 127.0.0.1:12345
Accept: */*
_ADD_CLASS*21112*ab*https://somewebsite

这就是我所期待的。

当我使用 cURL 将此请求发送到我的服务器时,由于某种原因它不会发送 header :

curl -H "REMOVE_CLASS*21111*a" 127.0.0.1:12345

GET / HTTP/1.1
User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
Host: 127.0.0.1:12345
Accept: */*
"" (as shown in java)

知道为什么第二个请求显示为“”吗?这是一些代码:

private static void handleRequest(Socket socket) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String socketData = null;
    String[] commands;
    while (br.ready()) {
        socketData = br.readLine();
        //parse command
        if (socketData.compareTo("") == 0) {
            //Log error
            break;
        }else {
            if (socketData.charAt(0) != '_') continue;
            commands = socketData.split("\\*");
            if (commands[0].compareTo("_ADD_CLASS") == 0) {
                //syntax is ADD_CLASS*CRN*TOKEN*WEB_ADDRESS
                socket.close();
                addClass(commands[1], commands[2], commands[3]);
                break;
            }else if(commands[0].compareTo("_REMOVE_CLASS") == 0) {
                //syntax is REMOVE_CLASS*CRN*TOKEN
                socket.close();
                removeClass(commands[1], commands[2]);
                break;
            }else if(commands[0].compareTo("_UPDATE_TOKEN") == 0) {
                //syntax is UPDATE_TOKEN*OLD_TOKEN*NEW_TOKEN
                socket.close();
                updateDeviceToken(commands[1], commands[2]);
                break;
            }else {
                //log error
            }
    }
    }
    socket.close();
}   

最佳答案

HTTP Spec ,标题中必须有一个冒号,而您没有指定冒号。我还将向您指出 cURL man page :

-H, --header ... If you send the custom header with no-value then its header must be terminated with a semicolon, such as -H "X-Custom-Header;" to send "X-Custom-Header:".

话虽如此,为什么您要尝试使用 HTTP header 发明自己的方法而不是采用 REST风格?使用 JAX-RS 实现并让它为您处理具体的套接字内容不是更容易吗?或者至少您可以使用 Servlet/过滤器。

关于java - Curl 发送空白 header (测试 Java Web 服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466239/

相关文章:

java - 无法通过 java Runtime.getRuntime.exec() 发送 JSON 字符串;

php - 为什么我的 POST file_get_contents 返回 HTTP 错误请求?

linux - 使用 Curl 在 URL 中使用变量同时下载多个文件

java - onActivityResult 没有受到 Android 的影响

java - 错误: Main method not found in class Text,请将main方法定义为:public static void main(String[] args)

java - Android:如何使用 KSOAP2 从 header 和正文获取数据

java - 安卓工作室 : NOAA Rest API

java - 正则表达式在回车和新行上(可能)出现问题

java - 在 ubuntu 的类路径中设置 log4j

php - 在 Crontab 中获取包含 jQuery 帖子的网页