【发布时间】:2011-09-14 07:43:18
【问题描述】:
我的 iPhone 应用程序的一位用户在使用他的移动数据连接时抱怨它无法工作(但通过 Wifi 可以正常工作)。我的应用程序向第三方 REST API 发出请求,为此我使用 ASIHTTPRequest 库。
我的 HTTP 请求的一个参数是用户名(即电子邮件地址),因此我使用以下代码对用户名进行编码:
-(NSString *) encodeString:(NSString *) string
{
NSString * returnString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef) string,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8 );
return [returnString autorelease];
}
然后将其内置到 URL 中,如下所示:
// Setup the url we need to make the request to the sharkscope API
NSString * urlString = [NSString stringWithFormat: @"%SERVICEADDRESSHERE?Username=%@&Password=%@",
encodedUserName, m_md5Key];
NSURL * url = [NSURL URLWithString:urlString];
request = [[ASIHTTPRequest requestWithURL:url] retain];
我的应用程序发出的请求是具有以下用户名的请求:
Username=Fred.Bloggs%40wanadoo.fr
对于这个用户,在使用他的移动数据连接时,服务器收到的是:
Username=Fred.Bloogs%2540wanadoo.fr
很明显,% 字符在我调用 requestWithURL 和它到达服务器之间的某个地方被编码。我无法理解原因,因为我有数百名其他用户可以通过他们的数据连接正常运行请求。
我什至需要对传入 requestWithURL 的值进行编码吗?
有没有人知道 % 字符在什么阶段被重新编码。我猜它一定在 ASIHTTP 库中,但无法确定在这种情况下会触发它的情况。
【问题讨论】:
标签: iphone ios wifi asihttprequest 3g