我有一个NSString带有空格和&字符的URL字符串().如何url编码整个字符串(包括&&符号和空格)?
我NSString喜欢这样的:
http://www.
Run Code Online (Sandbox Code Playgroud)
但我想将其转换为:
http%3A%2F%2Fwww.
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在我的iphone应用程序中执行HTTP Post,并且我发送到服务器的其中一个参数是URL.问题是,当我从NSURL转换为NSURLRequest时,字符串http://www.slashdot.org变为http:/www.slashdot.org(缺少正斜杠之一)
有没有解决的办法?
这是我正在使用的代码:
NSString *host = @"example.host.com";
NSString *urlString = [NSString stringWithFormat:@"/SetLeaderUrl.json?leader_email=%@&url=%@",localEmail,urlToPublish];
NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:host path:urlString];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *jsonString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
我已经使用NSLog来查看它丢失'/'的位置,它位于第四行:
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
Run Code Online (Sandbox Code Playgroud)
感谢您抽出宝贵时间阅读!
我使用以下代码,
NSString *jsonD = [NSString stringWithFormat:@"rawJson=%@",[fbUserInfo jsonUTF8String]];
NSData *myRequestData = [jsonD dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
cachePolicy:policy timeoutInterval:20.0];
[ request setHTTPMethod: @"POST" ];
[request setValue:[NSString stringWithFormat:@"%d", [myRequestData length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[ request setHTTPBody: myRequestData ];
Run Code Online (Sandbox Code Playgroud)
在这段代码中我有日期2013-06-29T18:33:17+0000.问题是我的服务器接收日期为 2013-06-29T18:33:17 0000.看到空间.我不知道为什么会这样.
有问题.这是我的代码:
Latitude = [TBXML textForElement:lat]; //Latitude & Longitude are both NSStrings
Longitude= [TBXML textForElement:lon];
NSLog(@"LAT:%@ LON:%@",Latitude,Longitude);
NSString *defaultURL = @"http://api.wxbug.net/getLiveWeatherRSS.aspx?ACode=000000000&lat=+&long=-&unittype=1";
newURL = [[defaultURL stringByReplacingOccurrencesOfString:@"+"
withString:Latitude]
stringByReplacingOccurrencesOfString:@"-"
withString:Longitude];
NSLog(@"%@",newURL);
Run Code Online (Sandbox Code Playgroud)
这是输出:
LAT:-33.92 LON:18.42
http://api.wxbug.net/getLiveWeatherRSS.aspxACode=000000000&lat=18.4233.92&long=18.42&unittype=1
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,附加代码发生了一些奇怪的事情.我在这里做错了吗?
大家好!我从http://deusty.blogspot.com/2006/11/sending-http-get-and-post-from-cocoa.html上读到了一篇文章,但我没有得到一些东西.我尝试用它来建立NSURLConnection,以及它根本不会接收数据?如果您对此感兴趣,请访问www.lockerz.com.
http://pastebin.com/8fP9TX8q.修复链接,因为我不能发布超过1.
它实际上说连接失败了,我不知道为什么......
我正在构建一个简单的http POST请求.在这篇文章中我需要添加一些项目,其中一项是在前一个请求中被拉下来的大型视图状态字符串.我注意到的是,原始请求需要转义所有特殊字符(如下所示)
_ EVENTTARGET =& _ EVENTARGUMENT =& __ VIEWSTATE = %% 3D&
但我不确定我是否在目标c中做到了这一点.目前,当我NSLog出视口状态字符串时,它仍然显示/和=字符.
任何人都可以证实我在正确的道路上吗?如果不是,我将如何转换viewstate中的特殊字符(即 - 而不是=我应该得到%3D)?
- (void)doHttpPostWithViewState:(NSString *)viewstate
{
responseData = [[NSMutableData data] retain];
NSURL *url = [NSURL URLWithString:@"https://localhost/Login"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSString* theBodyString = [[NSString alloc] initWithFormat:@"__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%@",viewstate];
NSData *requestData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
[request setHTTPMethod:@"POST"];
[request setValue:@"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
[request setAllHTTPHeaderFields:headers];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
Run Code Online (Sandbox Code Playgroud)
最后,为了本地调试目的 …
我的应用程序调用Web服务登录.通常服务没有任何问题,但是当我有一个特殊字符的密码时(例如:!*'\"();:@&= + $,/?%#[]%),Web服务器不会不允许我登录,因为在服务器端我收到的密码没有特殊字符,例如:
密码插入我的应用程序: test+test
密码接收到Web服务器: testtest
如您所见,请求删除特殊字符实际上我使用以下代码发送登录凭据:
- (id)sendRequestToURL:(NSString *)url withMethod:(NSString *)method withUsername:(NSString*)username withPassword:(NSString*)password andInstallationId:(NSString*)installationId {
NSURL *finalURL = [[NSURL alloc]init];
if ([method isEqualToString:@"POST"]) {
finalURL = [NSURL URLWithString:url];
} else {
NSLog(@"Metodo no previsto");
}
NSString *post = [NSString stringWithFormat:@"username=%@&password=%@&installationId=%@", username, password, installationId];
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)postData.length];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
[request setURL:finalURL];
[request setHTTPMethod:method];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; …Run Code Online (Sandbox Code Playgroud)