2016-07-21 15 views
-2

Ich weiß nicht, warum, aber wenn ich die folgende URL nenne es mir BAD REQUEST gibt - ungültige URL, obwohl diese URL auf Safari-Browser und anderen Browsern funktioniert auchNSURL Rückkehr null

http://www.ysl.com/wx/shop-product/women/top-handles#{"ytosQuery":"true","department":"handbags_tophandle_w","gender":"D","brand":"","macro":"","micro":"","season":"A,P,E","color":"","size":"","site":"","section":"","sortRule":"","yurirulename":"searchwithdepartment","microcolor":"","agerange":"","macroMarchio":"","page":"2","productsPerPage":"50","modelnames":"","look":"","washtype":"","fabric":"","prints":"","suggestion":"false","suggestionValue":"","material":"","occasion":"","weight":"","gal 

I verwende folgenden Code:

NSString *str = [NSString stringWithFormat:@"%@",[payload stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]]; 

NSString* webStringURL = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

webStringURL = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSURL *payload = [NSURL URLWithString:webStringURL]; 

Irgendwelche Hilfe Guys? Was mache ich falsch?

+0

'{' ist in einer URL nicht zulässig. In der Tat ist das JSON? – Droppy

Antwort

0

Verwenden Sie nicht stringByReplacingPercentEscapesUsingEncoding: auf die Loch-URL, sondern nur auf die GET-Parameter.

Jetzt http:// wird auch maskiert werden, so dass http%3A%2F%2F wird, die nicht als URL gültig ist.

+0

Wenn Sie sehen, addiere ich auch wieder percentescape in der gesamten URL. – Shah

+0

Sie sollten nicht, auf die Parameter sollten entkommen. – rckoenes

+1

Sie sollten keine dieser Methoden überhaupt verwenden. Der erste entfernt Escape-Sequenzen (aber es gibt keine), und der zweite versucht, sie überall wieder hinzuzufügen. Die richtige Methode zum Codieren von URL-Daten finden Sie unter https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/WorkingwithURLEncoding/WorkingwithURLEncoding.html auf der Apple-Entwickler-Website. Sie müssen auch Ihre NSStrings (__bridge CFStringRef) und (__bridge_transfer NSString *) sie auf dem Weg zurück für ARC. – dgatwood