URL-Codierung iOS NSURL-Fehler

URL, die in Firefox, Chrome-Browser auf dem Desktop, geöffnet wird, wird in WebView auf dem iPhone nicht geöffnet. Diese URL greift angeblich auf eine GET-Anfrage zu. Beim Erstellen der NSURL ohne prozentuales Ausweichen wird die URL nicht generiert. Bei Verwendung von Percentescape wird die URL zu einem ungültigen URL-Inhalt weitergeleitet.

Gibt es eine andere Kodierung für Desktop-Browser und nicht für das iPhone? oder mobile Safari? Gibt es andere Möglichkeiten, die URL in iOS zu verschlüsseln als die Verwendung von

-stringByAddingPercentEscapesUsingEncoding
-CFURLCreateStringByAddingPercentEscapes

Das generiert ungültige Anforderungsinhaltsseiten vom Server.

Jede Hilfe wäre wirklich toll, danke.

BEARBEITEN:
Die URL wurde wie folgt generiert

http://something.test.com/iostest/index.html?{"a":"b"}

Es wurde herausgefunden, dass das Nichtcodieren der geschweiften Klammern das Problem in iOS verursacht. wie in

NSString *tempUrlSting = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)tempURLA,CFSTR("{}"), CFSTR("\""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
NSURL *tempUrl=[NSURL URLWithString:tempUrlSting];
Wenn Sie die geschweiften Klammern in der URL nicht codieren, aber den Rest mit [Robs Antwort] [1] wie oben codieren. Beim Erstellen der NSURL ist die URL leer.Wenn die geschweiften Klammern codiert werden, wird die URL ordnungsgemäß generiert, der Server löst jedoch eine Ausnahme aus.

DieseFrage schlägt vor, CFNetworking zu verwenden.

BEARBEITEN
Verwendet CFNetworking wie unten

-(void)getDataFromUrl{
    CFStringRef tempURLA = CFSTR("http://my.test.server/iostest/index.html?{\"a\":\"b\"}");
    CFStringRef tempUrlSting = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)tempURLA,CFSTR("{}"), CFSTR("\""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));

    CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, tempUrlSting, NULL);

    CFStringRef requestMethod = CFSTR("GET");
    CFHTTPMessageRef myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, myURL,kCFHTTPVersion1_1);

    CFStringRef headerFieldName = CFSTR("Accept");
    CFStringRef headerFieldValue = CFSTR("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
    CFHTTPMessageSetHeaderFieldValue(myRequest, headerFieldName, headerFieldValue);


    [self performHTTPRequest:myRequest];

}

-(void)performHTTPRequest:(CFHTTPMessageRef)request {
    CFURLRef gotdatab = (__bridge CFURLRef)(CFBridgingRelease(CFHTTPMessageCopyRequestURL(request)));
//    NSLog(@"(CFHTTPMessageRef request  %@",gotdatab);

    CFReadStreamRef requestStream = CFReadStreamCreateForHTTPRequest(NULL, request);

    CFReadStreamOpen(requestStream);

    NSMutableData *responseBytes = [NSMutableData data];
    NSError *error;

    while (TRUE) {

        if (CFReadStreamHasBytesAvailable(requestStream)) {
            UInt8 streambuffer[1024];
            int readBytes = CFReadStreamRead (requestStream,streambuffer,sizeof(streambuffer));
            NSLog(@"Read: %d",readBytes);
            [responseBytes appendBytes:streambuffer length:readBytes];
        }

        if (CFReadStreamGetStatus(requestStream) == kCFStreamStatusError) {

            error = (NSError*)CFBridgingRelease(CFReadStreamCopyError (requestStream));
            if ([error code] == 61) {
                // connection refused
                NSLog(@"Error occured: %d",[error code]);
            }
            break;
        }
        if (CFReadStreamGetStatus(requestStream) == kCFStreamStatusAtEnd) {
            NSLog(@"Stream reached end!");
            error = nil;
            break;
        }

    }//
    CFHTTPMessageRef response = (CFHTTPMessageRef)CFReadStreamCopyProperty(requestStream, kCFStreamPropertyHTTPResponseHeader);

    if (response==NULL) {
        NSLog(@"response is null");
        return;
    }
}

Das oben Gesagte wurde anhand von Beispielen ausHier undHier

Die obige Methode hat immer noch das gleiche Problem. Das heißt: Wenn {} nicht verschlüsselt ist, wird die URL nicht generiert. Wenn die {} codiert sind, gibt der Server keinen korrekten Wert zurück.

Irgendwelche Vorschläge pls?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage