Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Curl发送空白头(测试Java web服务器)_Java_Curl - Fatal编程技术网

Curl发送空白头(测试Java web服务器)

Curl发送空白头(测试Java web服务器),java,curl,Java,Curl,我通过从cURL发送请求来测试我的web服务器。当我发送此命令时: curl -H "_ADD_CLASS*21112*ab*https://somewebsite" 127.0.0.1:12345 对于我的服务器,我在我的Java套接字中得到这个 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:1

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

curl -H "_ADD_CLASS*21112*ab*https://somewebsite" 127.0.0.1:12345 
对于我的服务器,我在我的Java套接字中得到这个

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将此请求发送到服务器时,由于某些原因,它不会发送头:

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();
}   
根据,标题中必须有冒号,而您没有指定冒号。我还将向您指出:

-H、 --标题。。。如果发送没有值的自定义标头,则其标头必须以分号终止,例如-H“X-custom-header;”以发送“X-custom-header:”


既然如此,为什么您要尝试使用HTTP头来发明自己的方法,而不是采用一种样式?使用JAX-RS实现并让它为您处理基本的套接字不是更容易吗?或者至少你可以使用servlet/Filters。

我正在制作一个可以与我的服务器对话的iOS应用程序。你是说最初的请求之所以有效是因为它有冒号?是的。curl发送了头,因为您为要发送的头指定了键和值(这是必需的)。我仍然建议您考虑使用许多标准框架和设计模式中的一种来开发您的web服务,而不是尝试使用滚动套接字,尤其是在您使用HTTP的情况下。您的第一个请求将被任何数量的其他HTTP工具解析为“\u ADD\u CLASS*21112*ab*https”值“//somewebsite”的键但是,如果你执意要滥用HTTP头的snot,那就拿出你自己的密钥,比如“X-Action:”之类的。(X-非标准标题的常规前缀)