2012-01-23 36 views
8

Tôi đang cố gửi dữ liệu có định dạng JSON đến máy chủ bằng Java. Thông tin đang đến máy chủ nhưng máy chủ đang phản hồi bằng "Yêu cầu không hợp lệ".Java: Xem trước HttpPost Yêu cầu

HttpPost httpost = new HttpPost(path); 

    StringEntity se = new StringEntity(JSONRequest); 

    //sets the post request as the resulting string 
    httpost.setEntity(se); 

    //sets a request header so the page receving the request will know what to do with it 
    httpost.setHeader("Accept", "application/json"); 
    httpost.setHeader("Content-type", "application/json;charset=utf8"); 
    HttpResponse response = httpclient.execute(httpost); 

Đó là thiết lập cơ bản của yêu cầu của tôi. Đây là JSONData:

{"clientApplicationDto":{"AuthenticationToken":"","BrandId":12,"MobileDeviceApplicationId":0},"mobileDeviceInfo":{"CarrierName":"MTN-SA","OsVersion":"2.2.2","ClientApplicationVersion":"TEST","DeviceManufacturer":"HTC","DeviceName":"HTC Desire","DeviceUniqueId":"1e9766fa2ef4c53a","OsName":"8","ClientApplicationTypeId":3}} 

Nếu điều này có vẻ phù hợp với bạn, tôi sẽ bắt đầu gửi thư rác cho quản trị viên, nhưng bây giờ, tôi cần biết nếu tôi thiếu thứ gì đó.

+1

Hm .. cho người mới bắt đầu, 'StringEntity' (hay đúng hơn là bất kỳ 'AbstractHttpEntity' subclass) có một content-type, nó sẽ mặc định được thiết lập để hằng số 'HTTP.PLAIN_TEXT_TYPE', sử dụng' HTTP.DEFAULT_CONTENT_CHARSET' làm bộ ký tự. Hãy xem xét thiết lập kiểu nội dung của bạn bằng cách gọi 'se # setContentType (" application/json; charset = utf-8 ")' thay thế. JSON của bạn trông đẹp btw. – Jens

+0

Chỉ để kiểm tra xem vấn đề của nó với bài đăng hoặc mã java có phải bạn đã thử yêu cầu trong một cái gì đó giống như bàn điều khiển REST của Chrome không? https://chrome.google.com/webstore/detail/cokgbflfommojglbmbpenpphppikmonn – Dori

Trả lời

9

tôi thấy vấn đề này ... Máy chủ là cực kỳ nhạy cảm với những tiêu đề kiểu nội dung và định dạng nội dung

httpost.setHeader("Content-type", "application/json;charset=utf8"); 

cần thiết phải được thay đổi để

httpost.setHeader("Content-type", "application/json; charset=utf-8"); 

và StringEntity se = new StringEntity (JSONRequest);

cần phải được thay đổi để

 StringEntity se = new StringEntity(JSONRequest,"utf-8"); 

Cảm ơn Jens, rằng một bình luận đã đẩy tôi vào đúng hướng.

+0

Cảm ơn bạn, bạn đã lưu ngày của tôi! –

+0

Rất vui được biết điều đó đã giúp bạn^_ ^ – EZFrag

0

Hãy thử thế này, điều đó tốt cho u

private static String sendRequestPost(String url, Object obj) { 
     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 

      HttpPost httpost = new HttpPost(url); 
      if (obj != null) { 
       httpost.setEntity(new StringEntity(new Gson().toJson(obj), "utf-8")); 
       System.out.println("Request Json => " + new Gson().toJson(obj)); 
      } 
      httpost.setHeader("Accept", "application/json"); 
      httpost.setHeader("Content-type", "application/json; charset=utf8"); 

      HttpResponse response = httpClient.execute(httpost); 

      HttpEntity responseEntity = response.getEntity(); 
      String strResponse = EntityUtils.toString(responseEntity); 
      return strResponse; 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      return e.toString(); 
     } 

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