【发布时间】:2012-06-12 00:41:46
【问题描述】:
我正在尝试通过 POST 从 iPhone 应用程序将参数发布到 Google App Engine 上的 Java servlet。当服务器在本地运行时,这可以正常工作,但是当它部署到 App Engine 时,参数始终为空。为什么?
App 引擎代码:
String facebookFriendTokens = (String) req.getParameter("facebookFriendTokens");
//running on localhost, facebookFriendTokens works fine, deployed to GAE it's always null
log.warning("Facebook friends = " + facebookFriendTokens);
iPhone 代码:
NSString *urlString = [NSString stringWithFormat:@"%@/new_huddle?access_token=%@", SERVER_URL, [defaults objectForKey:@"FBAccessTokenKey"]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
NSString *postString = [NSString stringWithFormat:@"facebookFriendTokens=%@&eventDate=%@&placesTokens=%@&name=%@", encodedFriendTokens, encodedDateString, placesQueryStringParm, encodedNameString];
[encodedNameString release];
[encodedDateString release];
[encodedFriendTokens release];
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue: ...
如果我将 request.getInputStream() 处理为字符串并打印它,它会按预期显示。我应该这样解析字符串吗?
另外,我确实有一个 servlet 过滤器,这可能会修改请求吗?
我想知道服务器是否正在发出重定向,因此我在后续请求中丢失了所有正文数据。我现在正在本地测试。
【问题讨论】:
-
回调地址正确吗?
-
是的,由常量驱动,所以没有改变。
-
例如,您没有 https 的代理设置。
-
我不这么认为,请求正在通过,并且 GET 参数工作正常。只有切换到 POST 会导致问题
-
你已经准备好GAE servlet#doPost方法了吗?
标签: iphone ios google-app-engine jakarta-ee nsurlconnection