0
我通過從cURL發送請求來測試我的web服務器。當我把這個命令:發送空白標題的curl(測試Java Web服務器)
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 -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();
}
我正在製作一個iOS應用程序,將與我的服務器..所以你說的初始請求工作的原因是因爲它有一個冒號? – kamran619
是的。 curl發送了標題,因爲您爲要發送的標題指定了鍵和值(根據需要)。我仍然建議真正考慮使用許多標準框架和設計模式之一來開發Web服務,而不是試圖手動滾動套接字,特別是在使用HTTP時。 – Charlie
您的第一個請求將被任何數量的其他HTTP工具解析爲「_ADD_CLASS * 21112 * ab * https」值的「// somewebsite」的一個關鍵字 – Charlie