Я пытаюсь проверить HTTP-запрос на моем сервере. Http-клиент может отправлять мне разные запросы о том, что некоторые из них могут не соответствовать моему серверу, поэтому в этом случае я должен отправить клиенту ответ, что с запросом что-то не так.
Прежде чем продолжить чтение, учтите, что изменение порядка имен полей не повлияет на ответ. Так что порядок полей не имеет значения.
Например:
это законный запрос:
POST http://localhost HTTP/1.1
HOST: (here is an IP adress)
Content-Length: 50
Connection: Close
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
User_Id = 123456
Item_Id = 5007
Color = 1010
(ПРИМЕЧАНИЕ: запрос будет законным, если он имел только имена этих полей,
если он содержит какие-либо другие имена полей, он будет указан как недопустимый)
И поскольку это действительный запрос, мой сервер отправит 200 OK в качестве ответа следующим образом:
HTTP/1.1 200 OK
Connection: Close
Payment: 2755201
Но, например, если запрос имел ложное значение полей или неизвестное поле, как показано ниже:
Неверное значение User_Id:
POST http://localhost HTTP/1.1
HOST: (here is an IP adress)
Content-Length: 50
Connection: Close
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
User_Id = -2323
Item_Id = 5007
Color = 1010
Ответ будет:
HTTP/1.1 200 OK
Connection: Close
Error_ID: 602
Error_String: Error in user_Id (illegal user ID)
Или неизвестное имя поля:
POST http://localhost HTTP/1.1
HOST: (here is an IP adress)
Content-Length: 50
Connection: Close
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
User_Id = 123456
Item_Id = 5007
Sale = 0.5
Color = 1010
Ответ будет:
HTTP/1.1 200 OK
Connection: Close
Error_ID: 602
Error_String: Sale , unknown field name
В качестве способа проверки я подумал о том, чтобы поместить все допустимые имена полей в перечисление, и когда я получаю запрос, я анализирую их на основе этого перечисления, но у меня есть больше допустимых полей (не только user_Id, item_Id и color), поэтому применяю этот способ может занять много времени и может быть неэффективным, особенно потому, что порядок полей не имеет значения.
это мой код сервера:
@Test
public void main() throws IOException
{
serverSocket = new ServerSocket(80);
Socket clnt = null;
while (true)
{
clnt = serverSocket.accept();
System.out.println("after accept in server");
BufferedReader request = new BufferedReader(new InputStreamReader(clnt.getInputStream()));
BufferedWriter response = new BufferedWriter(new OutputStreamWriter(clnt.getOutputStream()));
String req = ".", strReq = "";
try
{
req=request.readLine();
while (!req.equals(""))
{
System.out.println(req);
strReq += (req + "\n");
req=request.readLine();
}
}
catch (Exception e)
{
// TODO: handle exception
e.printStackTrace();
System.out.println("xxxx");
}
System.out.println(strReq);
String httpResponse = "HTTP/1.1 200 OK\r\n";
//here will be the rest of the response
response.write(httpResponse);
System.out.println(httpResponse);
response.flush();
}
}
Я новичок в http, поэтому, если есть какая-нибудь библиотека валидации или какой-либо другой более эффективный способ валидации, я буду благодарен, если вы сможете предложить.