如何在NSURLSession中发起PUT请求?

3

我想向一个URL发起PUT请求,但当输出显示状态码为405时,这意味着对该URL的请求不是PUT请求。

NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];

NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];

NSURL * url = [NSURL URLWithString:@"http://httpbin.org/put"];

NSMutableURLRequest *request =[[NSMutableURLRequest alloc]initWithURL:url];
NSData *postbody = [@"name=testname&suggestion=testing123" dataUsingEncoding:NSUTF8StringEncoding];


[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

request.HTTPMethod = @"PUT";
[request setHTTPBody:postbody];


NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithURL:url
                                                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

                                                    if(error == nil)
                                                    {
                                                        [request setHTTPBody:data];
                                                        NSLog(@"Response = %@",response);
                                                    }

                                                }];

[dataTask resume];

有没有人能指出我错在哪里,我已经读了好几个小时关于这个问题的内容,但还是弄不清楚。请不要标记为重复,因为以前的提问者没有添加正文,而我的代码并非如此。另外,所提到的URL接受任何数据作为正文,所以我猜我设置的数据无关紧要。

编辑(答案):

经过昨天的头疼,我的一位资深同事帮我解决了这个问题,希望这可以帮助到某些人。data任务需要提供请求对象,而不是URL,这就是它总是在Charles Web调试工具中显示“GET”的原因。代码应该如下:

NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
       // code
}];

1
请查看以下链接:https://dev59.com/n2Ij5IYBdhLWcg3wzIJo 我希望这对您有用。 - Er.Shreyansh Shah
我将NSMutableData *postbody = [NSMutableData data];替换为NSData *postbody = [@"name=testname&suggestion=testing123" dataUsingEncoding:NSUTF8StringEncoding];,但仍然没有成功。 - Tejas K
我已经检查了那个链接,还是谢谢你。 - Tejas K
1个回答

1
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
request.HTTPMethod = @"PUT";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接