Я разработал простой веб-сервер на основе сокетов Java, который может читать запросы от клиента. Для клиента я использую библиотеку Apache HttpClient со следующим кодом:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:7777/");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null)
{
System.out.println(EntityUtils.toString(entity));
}
Когда я выполняю код, сервер получает запрос от клиента:
POST / HTTP/1.1
Content-Length: 0
Host: localhost:7777
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Это нормально. Но теперь я хочу отправить некоторые данные через HTTP-POST, поэтому я расширил свой код:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:7777/");
// Extension:
StringEntity testString = new StringEntity("Hello World!", "text/plain", "UTF-8");
httppost.addHeader(testString.getContentType());
httppost.setEntity(testString);
//
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null)
{
System.out.println(EntityUtils.toString(entity));
}
Если я сейчас выполню код, на сервер ничего не отправится. Если я удалю "httppost.setEntity (testString);" все будет работать как описано в начале. Таким образом, проблема должна быть в «httppost.setEntity (testString);».
Кто-нибудь знает, почему ничего не отправляется, когда я использую "setEntity"? Есть ли другой способ передачи данных? Я уже пробовал этот пример: http://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.0.x/httpclient/src/examples/org/apache/http/examples/client/ClientFormLogin.java но безуспешно.
Возможно, проблема в моем веб-сервере. Как должен выглядеть ответ на успешный запрос?
Я использую это сообщение:
HTTP/1.1 200 OK
Server: RAKETE Web server/0.1 (Java)
Content-Length: 2
Connection: close
Content-Type: text/html