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&param2=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向服务器发送和检索用户名和密码以及图像

AFNetworking V2.0 中的多参数 POST

异步添加图像 - ASIHTTPRequest

将 ASIHTTPRequest 更改为 AFNetworking 2 以获得简单的 URL 请求

ASIHTTPRequest 将 json 发送到 php 服务器

ASIHTTPRequest 和 userInfo