2015-12-14 2 views
0

Вот мой код для запуска запроса POSTJetty POST запрос код возвращения ошибки 411

// Instantiate HttpClient 
    HttpClient httpClient = new HttpClient(); 

    // Configure HttpClient, for example: 
    httpClient.setFollowRedirects(false); 

    // Start HttpClient 
    httpClient.start(); 


    ContentResponse response = httpClient.POST("url") 
      .agent("Mozilla/5.0") 
      .method(HttpMethod.POST) 
      .param("do","login") 
      .param("url","") 
      .param("vb_login_md5password", this.password) 
      .param("vb_login_md5password_utf", this.password) 
      .param("s", "") 
      .param("vb_login_username", this.username) 
      .param("vb_login_password", "") 
      .send(); 
    for(HttpField h : response.getHeaders()) 
     System.out.println(h.getName() + " = " + h.getValue()); 

Здесь выход

Date = Mon, 14 Dec 2015 08:17:08 GMT 
Content-Type = text/html 
Transfer-Encoding = chunked 
Connection = keep-alive 
Set-Cookie = __cfduid=dbb11c371945319b1d5943aad06c1977e1450081028; expires=Tue, 13-Dec-16 08:17:08 GMT; path=/; domain=.sythe.org; HttpOnly 
Server = cloudflare-nginx 
CF-RAY = 2548787ba9dc21b6-EWR 

Я смотрю на текст ContentResponse запроса пост, делая

response.getContentAsString() 

Однако по какой-то причине я продолжаю получать ошибку 411, которая говорит мне, что мой Content-Length равен нулю или не соответствует спецификации маньяки. Есть ли способ установить заголовок длины содержимого сообщения?

Спасибо!

EDIT: Делать это не делает никакой разницы в моем почтовом запросе

.header(HttpHeader.CONTENT_LENGTH, "0") 
+0

Можете ли вы дать версию и полное имя класса для HttpClient? Там их так много ... – Jan

+0

Эй, Ян. Спасибо за ответ! Я использую Jetty-9, который использует этот класс в качестве своего httpclient «import org.eclipse.jetty.client.HttpClient;». Я не уверен на 100%, я понимаю вопрос, если вам что-то еще нужно, пожалуйста, lmk – k9b

ответ

1

С .param("do","login") указании параметров запроса будет добавлен. Для того, чтобы POST фактически содержал тело, я думаю, вам нужно установить content() по запросу. Может быть, FormContentProvider будет работать на вас?

+0

+100, если можно. Благодаря! Не возражаете ли вы объяснить, как вы нашли это через класс, который я вам дал в документации? Это поможет мне решительно решить свои проблемы. Еще раз спасибо – k9b

+0

Ну, '' Content-Length' подразумевает наличие 'is' контента (а не заголовков или параметров) в первую очередь - так что я пошел на метод, обеспечивающий это. Другие HttpClient имеют setRequestEntity(), например. И затем я проверил для реализации классов и наткнулся на этот FormContentProvider. – Jan

+0

Вы знаете, * технически * вы могли бы сделать +100. Неприемлемый ответ, задайте щедрость, позвольте мне ответить снова, примите это. Но, как бы то ни было, я рад, что моя догадка разыгралась для вас, поэтому нет необходимости в этом :-) – Jan

Смежные вопросы