NSURLRequest 如何POST到谷歌应用引擎?

2 投票
2 回答
669 浏览
提问于 2025-04-16 10:06

我现在在研究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]);

        }
    }

奇怪的是,在本地测试一切都正常,但当我把应用部署到网上后,POST方法就不工作了。

有什么想法吗?谢谢!

2 个回答

0

如果你要向 Google App Engine 发送一个 POST 请求,记得把网址从 'http' "http://myapp.appspot.com/echo" 改成 "https://myapp.appspot.com/echo",也就是加个 's'。

根据我的经验,发送一个不带 'https' 的网址到 Google App Engine 会导致它自动跳转。

0

你的服务器有没有可能被设置成,如果请求的地址后面没有斜杠,就自动转到一个有斜杠的地址?换句话说,可能是 http://myapp.appspot.com/echo 被转到了 http://myapp.appspot.com/echo/,而这种转向操作总是使用GET请求。

撰写回答