NSURLRequest POST到谷歌应用引擎?

时间:2011-01-17 09:46:16

标签: iphone python google-app-engine http-post

我目前正在研究GAE(Python),我正在尝试从iPhone应用程序发送POST请求。

使用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]);

        }
    }

奇怪的是,一切都在localhost中运行,但是当我在互联网上部署应用程序时,POST方法停止了工作。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

是否有可能将您的服务器设置为将不以斜杠结尾的请求重定向到具有斜杠的请求?换句话说,可能http://myapp.appspot.com/echo重定向到http://myapp.appspot.com/echo/,重定向始终是GET。

答案 1 :(得分:0)

如果您要向Google App Engine发送POST请求,请将网址更改为“https”“http://myapp.appspot.com/echo”为“https://myapp.appspot.com/echo”。

根据我的经验,向Google App Engine发送“非https”网址会导致重定向。