0

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)

2番目のリクエストが「」として表示される理由は何ですか?ここにいくつかのコードがあります:

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();
}   
4

1 に答える 1

1

HTTP仕様では、ヘッダーにはコロンが含まれている必要があり、コロンを指定していません。また、cURLのmanページも紹介します。

-H、--header ...値なしでカスタムヘッダーを送信する場合、そのヘッダーは-H"X-Custom-Header;"のようにセミコロンで終了する必要があります。「X-Custom-Header:」を送信します。

そうは言っても、 RESTスタイルを採用する代わりにHTTPヘッダーを使用して独自のメソッドを発明しようとしているのはなぜですか?JAX-RS実装を使用して、本質的なザラザラしたソケットを処理できるようにする方がはるかに簡単ではないでしょうか。または、少なくともサーブレット/フィルタを使用できます。

于 2012-11-20T03:54:47.800 に答える