JamieH
JamieH

Reputation: 4859

ASIHTTPRequest problem with parameters using 3G conneciton (Fine with Wifi)

I have one user of my iPhone application who is complaining it does not work when using his mobile data connection (but works fine via Wifi). My application make a request to a third party REST API and I use the ASIHTTPRequest library for this.

One parameter of my HTTP request is a username (which is an email address), so I encode the username using the following code:

-(NSString *) encodeString:(NSString *) string
{
    NSString * returnString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                                                                                  NULL,
                                                                                  (CFStringRef) string,
                                                                                  NULL,
                                                                                  (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                                  kCFStringEncodingUTF8 );
    return [returnString autorelease];
}

This then gets built into a URL as follows:

// 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];

What get's sent out of my application is a request with the following Username:

Username=Fred.Bloggs%40wanadoo.fr

For this one user, what is received at the server when using his mobile data connection is:

Username=Fred.Bloogs%2540wanadoo.fr

So clearly the % character is being encoded somewhere between me making the call to requestWithURL and it arriving at the server. I can't understand the reason because I have hundreds of other users who can run the requests fine via their data connection.

Do I even need to encode the values passed into requestWithURL?

Does anyone have any idea at what stage the % character is being re-encoded. I'm guessing it must be in ASIHTTP library, but can't work out what circumstances would trigger it in this case.

Upvotes: 0

Views: 642

Answers (1)

JosephH
JosephH

Reputation: 37495

The corruption is probably happening because of a proxy or transparent proxy on the 3G connection, put in place by the carrier.

Possibly workounds:

  • Use POST instead of GET
  • Use https instead of http
  • Use http on a non-standard port

To prove this theory, you could try asking him to enter the same / similar request in Safari on iOS when he's using the 3g connection.

Upvotes: 1

Related Questions