Fazer PUT com corpo de POST

122 views
Skip to first unread message

André Gustavo Espeiorin

unread,
Sep 27, 2012, 1:32:10 PM9/27/12
to iphoned...@googlegroups.com
Boa tarde pessoal, estou tentando sem sucesso fazer uma requisição utilizando o método PUT do HTTP, no caso, é para atualização de dados no servidor, via uma API REST. Estou enviando o mesmo corpo via POST e está funcionando perfeitamente, mas via PUT o servidor não consegue reconhecer esses dados. Tentei a implementação primeiro com NSMutableURLRequest + NSURLConnection, e depois fiz com ASIHTTPRequest e não rolou em nenhum dos casos. Alguém aqui já passou por isso? Se eu conseguir eu posto o código fonte logo mais para dar uma luz.

Valeu

André
coderockr.com

Rafael Ortiz

unread,
Sep 27, 2012, 1:46:30 PM9/27/12
to iphoned...@googlegroups.com
Cara, utilize o nativo NSMutableURLRequest + NSURLConnection, na hora de especificar os headers do request:

[request setHTTPMethod:@"PUT"];
[request addValue:@"*/*" forHTTPHeaderField: @"Accept"];
[request addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField: @"Content-Type"];
[request addValue:@"pt-br" forHTTPHeaderField: @"Accept-Language"];
[request addValue:@"gzip, deflate" forHTTPHeaderField: @"Accept-Encoding"];

E para colocar os parâmetros no body:

NSString *httpBody = @"variavel=valor";
[request setHTTPBody:[httpBody dataUsingEncoding:NSUTF8StringEncoding]];
[request addValue:[httpBody lengthforHTTPHeaderField: @"Content-Length"];

Depois só usar esse request no NSURLConnection.

Qualquer dúvida, avisa.

Abs







--
Para postar neste grupo, envie um e-mail para
iphoned...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
iphonedevbraz...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/iphonedevbrazil?hl=pt-BR?hl=pt-BR

André Gustavo Espeiorin

unread,
Sep 27, 2012, 2:16:05 PM9/27/12
to iphoned...@googlegroups.com
Nesse caso está funcionando, o problema está na hora que eu quero adicionar arquivos no corpo da requisição, utilizando multipart/form-data, onde eu tenho que montar o corpo item a item. Via post vai que é uma beleza, via PUT não tá rolando ainda...

Rafael Ortiz

unread,
Sep 27, 2012, 2:31:27 PM9/27/12
to iphoned...@googlegroups.com
Qual retorno que tem quando vai via PUT?

Verifica se você tá setando o Content-Lenght nas headers do request, sem isso não rola requisição PUT.

André Gustavo Espeiorin

unread,
Sep 27, 2012, 3:06:07 PM9/27/12
to iphoned...@googlegroups.com
Bom, abaixo vou colar os headers e o body da requisição, não muda nada pra post e para put.

Headers:
"Content-Length" = 50039;
    "Content-Type" = "multipart/form-data; boundary=citalk_bundary";


Body:
--citalk_bundary
Content-Disposition: form-data; name="user_id"

14
--citalk_bundary
Content-Disposition: form-data; name="areaCode"

48
--citalk_bundary
Content-Disposition: form-data; name="notify_mail"

false
--citalk_bundary
Content-Disposition: form-data; name="phoneNumber"

912112312
--citalk_bundary
Content-Disposition: form-data; name="name"

Andre
--citalk_bundary
Content-Disposition: form-data; name="notify_push"

false
--citalk_bundary
Content-Disposition: form-data; name="email"

123asda@asdas.com
--citalk_bundary
Content-Disposition: form-data; name="whereLive"

Aasdasdas
--citalk_bundary
Content-Disposition: form-data; name="avatar"; filename="c12c2152b8ffca9e167580b8ad3351d4_1348772188.888965.jpeg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

>>>NSData<<<

--citalk_bundary--

André Gustavo Espeiorin

unread,
Sep 27, 2012, 8:50:15 PM9/27/12
to iphoned...@googlegroups.com
Bom pessoal, só para avisar, como o multipart/form-data não rolou via PUT, e por não ter acesso direto ao desenvolvimento da API que não está nas mãos da Coderockr, decidimos quebrar em duas partes a chamada. Um serviço POST/DELETE para imagem e um serviço PUT para o perfil. Agradeço a colaboração.

Abraço

André Espeiorin
Reply all
Reply to author
Forward
0 new messages