我有一个与服务器通信的应用程序。我需要向服务器发送消息 ID。我正在使用 NSMutableURL 请求。但是,我在提交请求时收到 405 错误。
下面是代码
messageid=@"1234";
NSURL *aUrl = [NSURL URLWithString:@"http://myexample.com:8080/Padua/rest/messages/messagetodelete"];
NSMutableURLRequest *deleterequest = [NSMutableURLRequest requestWithURL:aUrl
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:deleterequest
delegate:self];
[deleterequest setHTTPMethod:@"POST"];
[deleterequest setValue:[NSString stringWithFormat:@"%d", messageid.length] forHTTPHeaderField:@"Content-Length"];
[deleterequest setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
NSString *postString = messageid;
[deleterequest setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
[connection start];
服务器端代码如下
@POST
@Consumes("text/plain")
@Path("/messagetodelete")
public void messageToDelete(String messageid){
//code to delete the message in MongoDB
System.out.println("R u here for iphone??");
}
客户端(iPhone)中的代码是否正确。 POST 使用纯文本。我相信这是我出错的地方。
有人可以指导我如何实现它并使服务器接受 NSMutableURLRequest 吗?
最佳答案
存在以下潜在问题:
“删除”请求应使用 DELETE 方法。
header 的定义
[deleterequest setValue:@"application/x-www-form-urlencoded charset=utf-8"forHTTPHeaderField:@"Content-Type"];
是错误的。 MIME 类型
application/x-www-form-urlencoded
没有参数,也没有字符集。服务器将忽略此参数。指定 header 的正确方法是:
[deleterequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
并在应用百分比编码之前使用 UTF-8 作为参数字符串的字符编码。
设置 Content-Length header 时,您需要正确评估正文数据的长度以字节为单位。在您的代码中,您设置字符串的UTF-16代码单元数。因此,为了解决这个问题,您需要执行以下操作:
NSString* postString = ...; NSString* postData = [postString dataUsingEncoding:NSUTF8StringEncoding]; [deleterequest setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"]; [deleterequest setHTTPBody: postData];
您需要确保参数字符串已正确编码。
关于ios - POST NSMutableURLRequest 中出现 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20172459/