【问题标题】:ASIHTTPRequest problem with parameters using 3G conneciton (Fine with Wifi)使用 3G 连接的参数的 ASIHTTPRequest 问题(使用 Wifi 良好)
【发布时间】: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


    【解决方案1】:

    损坏可能是由于运营商在 3G 连接上设置的代理或透明代理造成的。

    可能的解决方法:

    • 使用 POST 而不是 GET
    • 使用 https 而不是 http
    • 在非标准端口上使用 http

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

    【讨论】:

    • 感谢您的建议,他通过 Safari 也遇到了同样的问题,所以我相信您的理论是正确的。不幸的是,它是第三方网络服务,所以我不能轻易改变我的调用方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2012-06-09
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多