Я пытаюсь отправить запрос с помощью JAVA HTTPCLIENT, и при этом получаю 404 Bad Request.
Я попытался написать код JAVA в Eclipse и получил 404 Bad Request, попытался отправить запрос через POSTMAN и получил HTTP-статус 500.
package com.apex.customer.service;
public class CustServicePostTest {
public static void main(String[] args) throws ClientProtocolException, IOException {
String url = "http://www.thomas-bayer.com/sqlrest/CUSTOMER/102";
//create the http client
HttpClient client = HttpClientBuilder.create().build();
//create the post message
HttpPost post = new HttpPost(url);
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("ID", "102"));
urlParameters.add(new BasicNameValuePair("FIRSTNAME", "Apex"));
urlParameters.add(new BasicNameValuePair("LASTNAME", "Consultancy"));
urlParameters.add(new BasicNameValuePair("STREET", "Shell Blvd"));
urlParameters.add(new BasicNameValuePair("CITY", "Fremont"));
post.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse response = client.execute(post);
System.out.println(response.getStatusLine().getStatusCode());
System.out.println("Parameters : " + urlParameters);
System.out.println("Response Code: " + response);
System.out.println(response.getStatusLine().getReasonPhrase());
}
}
Я ищу запрос 200 OK.
Почему вы считаете, что sqlrest
конечные точки веб-сервиса поддерживают application/x-www-form-urlencoded
полезные нагрузки? Я не знаю немецкий, но, кажется, для этого требуется XML или JSON или, может быть, даже YAML.
Проблема здесь из-за нескольких ошибок:
Итак, в этом случае, чтобы заставить его работать, попробуйте что-то вроде этого:
String url = "http://www.thomas-bayer.com/sqlrest/CUSTOMER/";
HttpClient client = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(url);
String xml = "<resource>";
xml += "<ID>102</ID>";
xml += "<FIRSTNAME>Apex</FIRSTNAME>";
xml += "<LASTNAME>Consultancy</LASTNAME>";
xml += "<STREET>Shell Blvd</STREET>";
xml += "<CITY>Fremont</CITY>";
xml += "</resource>";
post.setEntity(new StringEntity(xml));
HttpResponse response = client.execute(post);
System.out.println(response.getStatusLine().getStatusCode());
System.out.println("Response Code: " + response);
System.out.println(response.getStatusLine().getReasonPhrase());
Также очень полезно узнать еще один способ протестировать его с помощью таких инструментов, как curl
утилита командной строки. Например, вы можете опубликовать продукт следующим образом:
curl -X POST http://www.thomas-bayer.com/sqlrest/PRODUCT/ -d '<resource><ID>103</ID><NAME>X</NAME><PRICE>2.2</PRICE></resource>'
Как только вы решите это, будет важно привыкнуть к HTTP-коды. Например, ошибка 500 означает, что что-то не так на стороне сервера, а ошибка 404 обычно означает, что вы попали в недопустимую конечную точку (она не существует).
Наконец, я не буду обсуждать, почему вы используете этот проект для отправки HTTP-запросов на сервер, но имейте в виду, что это не очень распространенный способ. В настоящее время REST с JSON был бы намного интереснее и приятнее :) Если вам это интересно, взгляните на Весенняя загрузка ОТДЫХ.
спасибо за ваш вклад в это. Я не понимал, что он ожидал в формате XML. Я новичок и изучаю концепции httplclient. Также я попробовал приведенный выше код и получил код ответа 500: внутренняя ошибка сервера.
Рад, что это помогло. HTTP-запросы поначалу немного сложны, но вскоре вы их освоите :)
Только сейчас понял, что вы упомянули об ошибке 500, попробовав код выше. Вероятно, это связано с тем, что идентификатор 102 уже существует. Попробуйте изменить идентификатор, и он должен работать как положено :)
Что такое
HttpClientBuilder
? Если это Apache HttpClient, отметьте его. И удалите тегselenium
, так как ваш код, похоже, вообще не использует Selenium. Короче говоря, прочитайте описания тегов, потому что там также явно указано «НЕ ИСПОЛЬЗОВАТЬ» для этого тегаhttpclient
.