NSURLRequest 如何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]);
}
}
奇怪的是,在本地测试一切都正常,但当我把应用部署到网上后,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请求。