gpt4 book ai didi

ios - AFNetworking:附加参数作为 PUT 请求的查询字符串

转载 作者:可可西里 更新时间:2023-11-01 05:14:45 27 4
gpt4 key购买 nike

首先,我意识到对于 PUT 请求,请求参数应该在请求正文中传递。但是,我正在使用一个 API(我只使用它,而不是开发它),它希望将请求参数附加为 PUT 请求的查询字符串。

我正在使用 AFHTTPClient 的子类。对于我提到的特定 PUT 请求,我使用了 getPath:parameters:success:failure:

到目前为止,我找到的解决方案是手动构建 path 变量以包含我要传递的参数。当然,这并不理想,我想知道是否还有其他不太容易出错的选项。

简而言之,有没有办法使用 AFHTTPClient(的子类)发送 PUT 请求,并将传递的参数附加(和编码)为查询字符串(就像 GET 请求一样)?

最佳答案

AFHTTPClient.m 中的 getPath:parameters:success:failure 方法调用 requestWithMethod:path:parameters。在后一种方法中,将根据某些值检查 HTTP 方法,以确定如何将参数附加到请求中。如您所见,默认情况下,参数仅应在 GET、HEAD 或 DELETE 请求的情况下附加到 URL。由于在 PUT 请求的情况下也需要将它们附加到 URL,因此修改 requestWithMethod:path:parameters 如下:

    - (NSMutableURLRequest *)requestWithMethod:(NSString *)method 
path:(NSString *)path
parameters:(NSDictionary *)parameters
{
NSURL *url = [NSURL URLWithString:path relativeToURL:self.baseURL];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url] autorelease];
[request setHTTPMethod:method];
[request setAllHTTPHeaderFields:self.defaultHeaders];

if ([method isEqualToString:@"GET"] || [method isEqualToString:@"HEAD"]) {
[request setHTTPShouldUsePipelining:YES];
}

if (parameters) {
if ([method isEqualToString:@"GET"] || [method isEqualToString:@"HEAD"] || [method isEqualToString:@"DELETE"] || [method isEqualToString:@"PUT"]) {
url = [NSURL URLWithString:[[url absoluteString] stringByAppendingFormat:[path rangeOfString:@"?"].location == NSNotFound ? @"?%@" : @"&%@", AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding)]];
[request setURL:url];
} else {
NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(self.stringEncoding));
switch (self.parameterEncoding) {
case AFFormURLParameterEncoding:;
[request setValue:[NSString stringWithFormat:@"application/x-www-form-urlencoded; charset=%@", charset] forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[AFQueryStringFromParametersWithEncoding(parameters, self.stringEncoding) dataUsingEncoding:self.stringEncoding]];
break;
case AFJSONParameterEncoding:;
[request setValue:[NSString stringWithFormat:@"application/json; charset=%@", charset] forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[AFJSONStringFromParameters(parameters) dataUsingEncoding:self.stringEncoding]];
break;
case AFPropertyListParameterEncoding:;
[request setValue:[NSString stringWithFormat:@"application/x-plist; charset=%@", charset] forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[AFPropertyListStringFromParameters(parameters) dataUsingEncoding:self.stringEncoding]];
break;
}
}
}

return request;
}

关于ios - AFNetworking:附加参数作为 PUT 请求的查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11498729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com