无法通过API向服务器发送https POST请求,获取“HTTPS必需”

时间:2013-04-16 11:32:25

标签: ios objective-c nsurlconnection nsurlrequest

在我正在构建的应用程序中,我需要向API发送安全的POST请求。请求的主体是JSON。将请求指定如下:

NSMutableURLRequest *urlRequest=[NSMutableURLRequest
                                     requestWithURL:
                                     [NSURL URLWithString: @"https://testserver.test:443/userinfo"]
                                     cachePolicy:NSURLRequestUseProtocolCachePolicy
                                     timeoutInterval:60.0];

[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setValue:delegate.currentUser.token forHTTPHeaderField:@".ASPXAUTH"];

[urlRequest setHTTPMethod:@"POST"];

[urlRequest setHTTPBody:postData];
NSURLConnection* connection = [[NSURLConnection alloc] 
                                initWithRequest:urlRequest delegate:self];

这通常有效,但有时不会,然后将获得400:HTTPS必需消息。在服务器端,这些尝试显示请求被发送到端口80而不是443,即使我已经在URL中指定了端口(这是否应该是必要的?)。

我在这里可能缺少什么想法?

编辑: 这是我发生这种情况时的反应

headers: {
"Cache-Control" = "no-cache";
"Content-Length" = 14;
"Content-Type" = "text/plain; charset=utf-8";
Date = "Tue, 16 Apr 2013 12:31:02 GMT";
Expires = "-1";
Pragma = "no-cache";
Server = "Microsoft-IIS/7.5";
"Set-Cookie" = "ARRAffinity=ed9f________________________________8ac4;Path=/;Domain=testserver.test:443, WAWebSiteSID=c390_________________0; Path=/; HttpOnly";
"X-AspNet-Version" = "4.0.30319";
"X-Powered-By" = "ASP.NET, ARR/2.5, ASP.NET";

}

编辑2: 思考。

  1. 我是否必须以某种方式配置NSMutableURLRequest以确保它使用安全连接?还是NSURLConnection?
  2. 为什么它有时会起作用,有时候不起作用?

2 个答案:

答案 0 :(得分:1)

服务器端是否有多台服务器,而且没有正确设置一台服务器?由于问题仅在某些时候发生,因此不太可能是客户端问题。您不需要在URL中指定端口。

答案 1 :(得分:0)

REST是一个非常高级的概念。事实上,它甚至根本没有提到HTTP!

如果您对如何在HTTP中实现REST有任何疑问,可以随时查看Atom Publication Protocol (AtomPub)规范。 AtomPub是一个使用HTTP编写RESTful webservices的标准,由许多HTTP和REST杰出人员开发,其中一些来自REST的发明者和HTTP本身(共同)发明者Roy Fielding的输入。

事实上,您甚至可以直接使用AtomPub。虽然它来自博客社区,但它绝不仅限于博客:它是一种通用协议,用于通过HTTP与任意资源的任意(嵌套)集合进行REST交互。如果您可以将应用程序表示为嵌套的资源集合,那么您可以使用AtomPub,而不必担心是使用PUT还是POST,要返回的HTTP状态代码以及所有这些详细信息。

This is what AtomPub has to say about resource creation:

要将成员添加到集合,客户端会将POST请求发送到集合的URI。

希望这有帮助。