使用3G连接的参数的ASIHTTPRequest问题(精细的Wifi)

时间:2011-09-14 07:43:18

标签: iphone ios wifi asihttprequest 3g

我有一个我的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库中,但在这种情况下无法确定触发它的情况。

1 个答案:

答案 0 :(得分:1)

由于运营商实施的3G连接上的代理或透明代理,可能会发生损坏。

可能的工作原理:

  • 使用POST代替GET
  • 使用https代替http
  • 在非标准端口上使用http

为了证明这个理论,当他使用3g连接时,你可以尝试让他在iOS上的Safari中输入相同/类似的请求。