ASIHttpRequest - 如何将参数的 NSDictionary 转换为 url 编码的查询参数字符串?
Posted
技术标签:
【中文标题】ASIHttpRequest - 如何将参数的 NSDictionary 转换为 url 编码的查询参数字符串?【英文标题】:ASIHttpRequest - how to convert NSDictionary of params to url-encoded query param string? 【发布时间】:2011-08-15 00:25:41 【问题描述】:使用作为 NSDictionary 提供的查询参数通过 ASIHttpRequest 发出 GET 请求的首选方式是什么? 如何得到 来自 NSDictionary *params 到 ?param1=value1¶m2=value2(百分比编码)
显然我可以手动构建 URL 的查询部分,但似乎有更好的方法。
谢谢!
【问题讨论】:
【参考方案1】:您必须将查询字符串作为 URL 的一部分传递。来自GitHub上的ASIHTTPRequest
接口:
// The url for this operation, should include GET params in the query string where appropriate
NSURL *url;
如果您不想使用自己的字典到查询字符串方法,请查看 Google Toolbox for Mac 中的 GTMNSDictionary+URLArguments
类别(.h、.m)。它向NSDictionary
添加了一个方法gtm_httpArgumentString
,这应该是您所追求的。
【讨论】:
【参考方案2】:我没有使用 ASIHTTPRequest,但我对我创建的 URLRequest 有类似的需求。这是我正在做的事情:
- (NSString *) createParamString
NSDictionary *params = // build up the param dictionary
NSString *result = @"";
id key;
NSEnumerator *enumerator = [params keyEnumerator];
while (key = [enumerator nextObject])
result = [result stringByAppendingFormat:@"%@=%@&", key, [params objectForKey:key]];
result = [result substringToIndex:[result length] - 2];
return [result stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
不确定它是否适合所有情况,但它对我来说足够好
【讨论】:
如果 params 为空,那一行会有问题:result = [result substringToIndex:[result length] - 2];尝试添加条件:if ([result length] >= 2)以上是关于ASIHttpRequest - 如何将参数的 NSDictionary 转换为 url 编码的查询参数字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何在ios中使用ASIHTTPRequest向服务器发送和检索用户名和密码以及图像
将 ASIHTTPRequest 更改为 AFNetworking 2 以获得简单的 URL 请求