2012-05-15 46 views
9

Tôi cần một ví dụ mã đơn giản về gửi yêu cầu bài đăng http với thông số bài đăng mà tôi nhận được từ đầu vào biểu mẫu. Tôi đã tìm thấy Apache HTTPClient, nó đã đạt đến API và rất nhiều ví dụ phức tạp, nhưng tôi không thể tìm thấy một ví dụ đơn giản về việc gửi yêu cầu đăng bài http với các tham số đầu vào và nhận phản hồi văn bản.Cách gửi yêu cầu đăng bài http đơn giản với thông số bài đăng trong java

Cập nhật: Tôi quan tâm đến Apache HTTPClient v.4.x, vì 3.x không còn được dùng nữa.

+0

http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet- Hướng dẫn-First-Servlets.html –

Trả lời

3

HTTP POST yêu cầu ví dụ sử dụng Apache HttpClient v.4.x

HttpClient httpClient = HttpClients.createDefault(); 
HttpPost httpPost = new HttpPost(url); 
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
builder.addTextBody("param1", param1Value, ContentType.TEXT_PLAIN); 
builder.addTextBody("param2", param2Value, ContentType.TEXT_PLAIN); 
HttpEntity multipart = builder.build(); 
httpPost.setEntity(multipart); 
HttpResponse response = httpClient.execute(httpMethod); 
3

Tôi kéo mã này từ một dự án Android bởi Andrew Gertig mà tôi đã sử dụng trong ứng dụng của tôi. Nó cho phép bạn thực hiện một HTTPost. Nếu tôi có thời gian, tôi sẽ tạo một ví dụ POJO, nhưng hy vọng, bạn có thể mổ xẻ mã và tìm thấy những gì bạn cần.

Arshak

https://github.com/AndrewGertig/RubyDroid/blob/master/src/com/gertig/rubydroid/AddEventView.java

private void postEvents() 
{ 
    DefaultHttpClient client = new DefaultHttpClient(); 

    /** FOR LOCAL DEV HttpPost post = new HttpPost("http://192.168.0.186:3000/events"); //works with and without "/create" on the end */ 
    HttpPost post = new HttpPost("http://cold-leaf-59.heroku.com/myevents"); 
    JSONObject holder = new JSONObject(); 
    JSONObject eventObj = new JSONObject(); 

    Double budgetVal = 99.9; 
    budgetVal = Double.parseDouble(eventBudgetView.getText().toString()); 

    try { 
     eventObj.put("budget", budgetVal); 
     eventObj.put("name", eventNameView.getText().toString()); 

     holder.put("myevent", eventObj); 

     Log.e("Event JSON", "Event JSON = "+ holder.toString()); 

     StringEntity se = new StringEntity(holder.toString()); 
     post.setEntity(se); 
     post.setHeader("Content-Type","application/json"); 


    } catch (UnsupportedEncodingException e) { 
     Log.e("Error",""+e); 
     e.printStackTrace(); 
    } catch (JSONException js) { 
     js.printStackTrace(); 
    } 

    HttpResponse response = null; 

    try { 
     response = client.execute(post); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
     Log.e("ClientProtocol",""+e); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Log.e("IO",""+e); 
    } 

    HttpEntity entity = response.getEntity(); 

    if (entity != null) { 
     try { 
      entity.consumeContent(); 
     } catch (IOException e) { 
      Log.e("IO E",""+e); 
      e.printStackTrace(); 
     } 
    } 

    Toast.makeText(this, "Your post was successfully uploaded", Toast.LENGTH_LONG).show(); 

} 
15

Dưới đây là mã mẫu cho Http POST, sử dụng API Apache HTTPClient.

import java.io.InputStream; 
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.methods.PostMethod; 


public class PostExample { 
    public static void main(String[] args){ 
     String url = "http://www.google.com"; 
     InputStream in = null; 

     try { 
      HttpClient client = new HttpClient(); 
      PostMethod method = new PostMethod(url); 

      //Add any parameter if u want to send it with Post req. 
      method.addParameter("p", "apple"); 

      int statusCode = client.executeMethod(method); 

      if (statusCode != -1) { 
       in = method.getResponseBodyAsStream(); 
      } 

      System.out.println(in); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 
+0

Cảm ơn bạn, Sumit. Tôi cần ví dụ như vậy, nhưng ví dụ của bạn đang sử dụng Apache HttpClient v. 3.x, không được dùng nữa (thậm chí tôi không thể tìm thấy các phiên bản 3.x trong các trang tải xuống của họ). Bây giờ họ đề nghị HttpClient v.4.1, trong đó có API khác nhau, nhưng tôi không tìm thấy làm thế nào để đặt các thông số bài với API này. – Arshak

+3

Tôi đã tìm thấy các lọ cho httpClient v.3 và nó hoạt động cho tôi, nhưng dù sao tôi tự hỏi tại sao nó phức tạp như vậy để gửi yêu cầu bài đơn giản với v. 4.1 và trong java nói chung. – Arshak

+0

hi bạn có thể thêm tham số bổ sung chấp nhận một đối tượng tệp không? cảm ơn – Secondo

Các vấn đề liên quan