2012-07-24 20 views
12

Mam zamiar wysłać plik utworu (mp3/wav) i niektóre dane za pośrednictwem bezpiecznego, spokojnego serwisu WWW. Używam MultipartEntity do wykonania żądania HttpPost. Ale kiedy go wykonać poprzez HttpClient, serwer odpowiada ten błądBłąd systemu Android: MultipartEntity, żądanie wysłane przez klienta było niepoprawne syntaktycznie

HTTP status 400 - Bad Request typ: Raport o stanie komunikat: Bad Request Żądanie wysłane przez klienta było niepoprawne składniowo (Bad Request).

Jednak usługa działa bardzo dobrze, jeśli wywołujemy ją z poziomu interfejsu internetowego. pomóż

jego kod

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost postRequest = new HttpPost(); 
     try { 
      MultipartEntity reqEntity = new MultipartEntity(); 

      reqEntity.addPart("email", new StringBody("[email protected]")); 
      reqEntity.addPart("password", new StringBody("123")); 
      reqEntity.addPart("title", new StringBody("My new song")); 
      reqEntity.addPart("musicData", new FileBody(new File(FilePath))); 

      // FIlePath is path to file and contains correct file location 

      postRequest.setEntity(reqEntity); 

      postRequest.setURI(new URI(ServiceURL)); 
      HttpResponse response = httpclient.execute(postRequest); 

     } catch (URISyntaxException e) { 
      Log.e("URISyntaxException", e.toString()); 
     } 

ja również Apache mime4j, httpclient, httpcore i httpmime słoiki dla MultipartEntity.

To jest przystawka do strony HTML dla Usługi. enter image description here

+0

Czy na pewno działa uwierzytelnianie? – Mark

+0

tak ..... to jest – Azhar

+0

Czy możesz umieścić swój adres mapowania również w swoim serwisie? Możliwe, że Twoje żądanie adresu URL jest inne niż zmapowane. – tolgap

Odpowiedz

5

Spróbuj usunąć metodę setURI i podać adres URL podczas tworzenia obiektu HttpPost w następujący sposób. To zadziałało dla mnie (more here).

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost postRequest = new HttpPost(ServiceURL); 
try { 
    MultipartEntity reqEntity = new MultipartEntity(); 

    reqEntity.addPart("email", new StringBody("[email protected]")); 
    reqEntity.addPart("password", new StringBody("123")); 
    reqEntity.addPart("title", new StringBody("My new song")); 
    reqEntity.addPart("musicData", new FileBody(new File(FilePath)));  
    postRequest.setEntity(reqEntity); 

    HttpResponse response = httpclient.execute(postRequest); 

} catch (URISyntaxException e) { 
    Log.e("URISyntaxException", e.toString()); 
} 
+0

po prostu zaakceptuj to, ponieważ skończył się czas bounty i że jakoś jesteśmy blisko rozwiązania, ale problem nadal istnieje :( – Azhar

2

Nie trać czasu, próbując różnych different combinations.There pewne narzędzia dostępne do żądania HTTP HTTP za pomocą którego można śledzić żądania i odpowiedzi jesteś getting.Ex. HTTP Analyzer pobierz wersję próbną

Zadzwoń pod adres URL z działającego interfejsu sieciowego, skopiuj żądanie i odpowiedź , a następnie wykonaj to samo z programu, z którego narzędzie jest w stanie przechwycić twoje dane żądania i odpowiedzi.

Porównaj teraz niedziałający i pracujący wniosek, na pewno zadając pytanie, czy może to być problem z nagłówkiem, czy z pewnym problemem z uwierzytelnianiem.