2011-01-17 1 views
2

В настоящее время я изучаю GAE (Python), и я пытаюсь отправить POST-запросы из приложения iPhone.NSURLRequest POST для google-приложения?

Отправка с помощью метода GET работает нормально, но он просто терпит неудачу, когда я использую метод POST.

Вот на стороне сервера:

class echoHandler(webapp.RequestHandler): 
    def get(self): 
     password = self.request.get("password") 
     if password == "ping": 
      self.response.out.write("pong") 
     else: 
      self.response.out.write("erreur de password") 

    def post(self): 
     password = self.request.get("password") 
     if password == "ping": 
      self.response.out.write("pong") 
     else: 
      self.response.out.write("erreur de password") 

и на стороне клиента:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://myapp.appspot.com/echo"]]; 
    NSMutableURLRequest *maRequete = [NSMutableURLRequest requestWithURL:url]; 

    [maRequete setHTTPMethod:@"POST"]; 
    NSString *essaiMdp = @"password=ping"; 
    [maRequete setHTTPBody:[essaiMdp dataUsingEncoding:NSUTF8StringEncoding]]; 
    //[maRequete setValue:[NSString stringWithFormat:@"%d",[essaiMdp length]] forHTTPHeaderField:@"Content-Length"]; 
    //[maRequete setValue:@"text/html" forHTTPHeaderField:@"Content-Type"]; 
    //[maRequete setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 

    NSURLResponse *reponse; 
    NSError *erreur; 

    NSData *donneesPOST = [NSURLConnection sendSynchronousRequest:maRequete returningResponse:&reponse error:&erreur]; 

    if (donneesPOST) { 
     NSString *strResultat = [[NSString alloc] initWithData:donneesPOST encoding:NSUTF8StringEncoding]; 
     NSLog(@"reponse recue !"); 
     NSLog(strResultat); 
     resultat.text = strResultat; 

    } 
    else { 
     if (erreur) { 
      NSLog(@"erreur lors de la requete HTTP:%@", url); 
      NSLog(@"erreur: %@", [erreur localizedDescription]); 

     } 
    } 

Что странно, что все работает в локальном хосте, но когда я развернуть приложение в Интернете, метод POST перестал работать.

Любая идея? Спасибо !

+0

«Прекратили работать» как? Что вы видите на стороне клиента? В журналах на сервере? Вы добавили код отладки на сервер, чтобы определить, что на самом деле отправляется? –

+0

Извините за недоразумение, я говорил, что метод POST, похоже, не называется (серверная сторона), когда это приложение развертывается в Интернете (Google App Engine). Что касается кода отладки, локально SDK Google App Engine может помочь вам отладить это, но когда вы его развертываете, я не знаю, смогу ли я это сделать. Я пытался вручную отправлять HTTP-запросы с помощью Telnet, и то, что я получаю, было ошибкой 400 (неправильный URL), хотя он работал локально ... – Paraita

+0

Я тоже вижу эту проблему. У меня есть еще более простая настройка песочницы, а запросы POST терпят неудачу. Вы когда-нибудь это поняли? Пока я пока не работал. – gngrwzrd

ответ

0

Возможно ли, что ваш сервер настроен на перенаправление запросов, которые не заканчиваются косой чертой, чтобы это выполнялось? Другими словами, возможно, http://myapp.appspot.com/echo перенаправляет на http://myapp.appspot.com/echo/, а перенаправление всегда является GET.

+0

Я думаю, что ваш werservice perosn использовать метод get вместо метода запроса – GhostRider

+0

Приложение на стороне сервера работает нормально локально, но метод POST не будет вызываться при его развертывании в GAE. Я думаю, вы правы, похоже, что это связано с перенаправлением: /. Я попытаюсь добавить заголовок узла в http-запрос (он работает с Telnet) – Paraita

0

Если вы отправляете запрос POST в Google App Engine, измените URL на «https» «http://myapp.appspot.com/echo» на «https://myapp.appspot.com/echo».

От того, что я испытал, отправка URL-адреса «не-https» в Google App Engine вызывает перенаправление.

Смежные вопросы