ios - POST NSMutableURLRequest 中出现 405 错误

标签 ios macos http-post nsurlconnection nsmutableurlrequest

我有一个与服务器通信的应用程序。我需要向服务器发送消息 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/

相关文章:

ios - iAd View 与自定义 ViewController

python - 我可以告诉 lldb 使用 PATH 中第一个以外的 Python 吗?

c# - HttpWebRequest - 基础连接已关闭 : An unexpected error occurred on a send

ios - 在 xcode 中修改组织标识符

ios - xcode 7 类型参数不能应用于非参数化类

macos - 在 Swift 中处理窗口的关闭事件

objective-c - 应用程序内的 Cocoa 32 位和 64 位二进制文​​件

java - 使用 JSON 对象作为负载向 REST API 发出 POST 请求

c# - HttpWebRequest 仅在使用 POST 模式时获取 404 页面

iphone - 越狱的iOS : how resume(in foreground) from background