J'ai examiné de nombreuses questions concernant ce même problème et j'ai essayé de nombreuses solutions proposées sans succès. Celui situé here semble le plus pertinent, comme le commentaire par RedSonic a répondu pourquoi cela ne fonctionne pas.
J'essaie de faire une demande POST ou PUT à mon serveur en utilisant la bibliothèque Apache de Java.Utilisation de HttpPost/Put avec ContentType Java Apache
public static void put(String caseNumber,DefaultHttpClient httpClient)
throws Exception {
HttpPut putRequest = new HttpPut(
"http://localhost:8888/servlet/example1/" + caseNumber);
putRequest.addHeader("Version", version);
// putRequest.setHeader("Content-Type", content);
// putRequest.addHeader(new BasicHeader("ContentType", content));
putRequest.setHeader("Accept", accept);
putRequest.setHeader("Date", date);
List <NameValuePair> nvpsPut = new ArrayList <NameValuePair>();
nvpsPut.add(new BasicNameValuePair("group", jsonPostGroup));
putRequest.setEntity(new UrlEncodedFormEntity(nvpsPut));
HttpResponse response = httpClient.execute(putRequest);
}
J'ai essayé de créer une entité séparée et de définir le type de contenu de l'entité, puis définissez l'entité sur la requête. J'ai aussi essayé d'autres choses, mais je n'arrive pas à obtenir la demande d'avoir le type de contenu que je veux passer sans que les paramètres que j'essaye d'envoyer soient vides.
ont également essayé
HttpPut putRequest = new HttpPut("http://localhost:8888/servlet/example1/" + caseNumber);
putRequest.addHeader("Version", version);
putRequest.setHeader("Content-Type", content);
putRequest.setHeader("Accept", accept);
putRequest.setHeader("Date", date);
BasicHttpParams bhp = new BasicHttpParams();
bhp.setParameter("test", jsonPostGroup);
putRequest.setParams(bhp);
HttpResponse response = httpClient.execute(putRequest);
Log:
BasicClientConnectionManager - Get connection for route {}->http://localhost:8888
DefaultClientConnectionOperator - Connecting to localhost:8888
RequestAddCookies - CookieSpec selected: best-match
RequestAuthCache - Auth cache not set in the context
RequestTargetAuthentication - Target auth state: UNCHALLENGED
RequestProxyAuthentication - Proxy auth state: UNCHALLENGED
DefaultHttpClient - Attempt 1 to execute request
DefaultClientConnection - Sending request: PUT /servlet/example1/000001994 HTTP/1.1
wire - >> "PUT /servlet/example1/000001994 HTTP/1.1[\r][\n]"
wire - >> "Version: 1.1[\r][\n]"
wire - >> "Content-Type: application/JSON[\r][\n]"
wire - >> "Accept: vnd.siren+JSON[\r][\n]"
wire - >> "Date: Wed Aug 21 15:30:00 EDT 2013[\r][\n]"
wire - >> "Content-Length: 0[\r][\n]"
wire - >> "Host: localhost:8888[\r][\n]"
wire - >> "Connection: Keep-Alive[\r][\n]"
wire - >> "User-Agent: Apache-HttpClient/4.2.5 (java 1.5)[\r][\n]"
wire - >> "[\r][\n]"
headers - >> PUT /servlet/example1/000001994 HTTP/1.1
headers - >> Version: 1.1
headers - >> Content-Type: application/JSON
headers - >> Accept: vnd.siren+JSON
headers - >> Date: Wed Aug 21 15:30:00 EDT 2013
headers - >> Content-Length: 0
headers - >> Host: localhost:8888
headers - >> Connection: Keep-Alive
headers - >> User-Agent: Apache-HttpClient/4.2.5 (java 1.5)
wire - << "HTTP/1.1 200 OK[\r][\n]"
wire - << "Set-Cookie: JSESSIONID=davwq58qgxr8yvyw7bfybbbv;Path=/[\r][\n]"
wire - << "Expires: Thu, 01 Jan 1970 00:00:00 GMT[\r][\n]"
wire - << "Content-Type: text/html; charset=ISO-8859-1[\r][\n]"
wire - << "Content-Length: 0[\r][\n]"
wire - << "Server: Jetty(9.0.0.v20130308)[\r][\n]"
wire - << "[\r][\n]"
DefaultClientConnection - Receiving response: HTTP/1.1 200 OK
headers - << HTTP/1.1 200 OK
headers - << Set-Cookie: JSESSIONID=davwq58qgxr8yvyw7bfybbbv;Path=/
headers - << Expires: Thu, 01 Jan 1970 00:00:00 GMT
headers - << Content-Type: text/html; charset=ISO-8859-1
headers - << Content-Length: 0
headers - << Server: Jetty(9.0.0.v20130308)
ResponseProcessCookies - Cookie accepted: "[version: 0][name: JSESSIONID][value: davwq58qgxr8yvyw7bfybbbv][domain: localhost][path: /][expiry: null]".
DefaultHttpClient - Connection can be kept alive indefinitely
BasicClientConnectionManager - Releasing connection [email protected]
BasicClientConnectionManager - Connection can be kept alive indefinitely
Modifier: J'ai trouvé quelques autres suggestions que je l'ai essayé. Tels que la définition des paramètres sur le httpclient au lieu de la demande (ce qui n'a pas beaucoup de sens dans ce scénario) mais j'ai connu le même problème.
Édition 8/23: Je suis toujours en mesure de transmettre des paramètres via le paramètre Entity et de donner à l'entité une paire nom + valeur. Cependant, comme mentionné, cela enlève le type de contenu. D'autres pensées avant que j'abandonne entièrement?
Tout d'abord, vous écrasez votre '' HttpEntity' en appelant setEntity() 'une seconde fois. Les paramètres de requête ne sont pas une entité. Vous pouvez utiliser la méthode 'setParams (HttpParams)' de 'AbstractHttpMessage' (c'est-à-dire par héritage' HttpPost') pour passer les paramètres de la requête. –
Désolé, le premier setEntity était un reste quand j'essayais un tas de choses différentes. Je vais l'éditer maintenant. J'avais essayé setParams à l'origine sans succès. J'ai juste essayé encore, et ajouterai ce code à la question originale. – user2402831
Ce que vous avez dans votre second extrait de code semble devoir fonctionner. Essayez d'activer la journalisation et vérifiez ce qui est envoyé et ce qui ne l'est pas. Voir [ici] (http://stackoverflow.com/questions/3246792/how-to-enable-logging-for-apache-commons-httpclient-on-android). –