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

问题描述:

在我构建的应用程序中,我需要向API发送安全的POST请求。请求的主体是JSON。指定请求如下:无法通过API向服务器发送https POST请求,获取“HTTPS必需”

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 Required Message。在服务器端,尽管我已经在URL中指定了端口(甚至有必要这样做),但这些尝试显示为将请求发送到端口80而不是443。

任何想法,我可能会在这里失踪?

编辑: 这是我得到的时候出现这种情况

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. 为什么它有时会起作用,有时不起作用?

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

如果您对如何在HTTP中实现REST有任何疑问,可以随时查看Atom Publication Protocol (AtomPub)规范。 AtomPub是用HTTP编写RESTful Web服务的标准,它由许多HTTP和REST开发人员开发,还有一些来自REST发明人Roy和HTTP(他自己)的发明人Roy Fielding的输入。

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

This is what AtomPub has to say about resource creation:

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

希望这会有所帮助。

+0

感谢您的回应,但它并没有真正帮我解决我的问题。道歉,如果我的问题不够具体。 – Johanna

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

+0

只有一台服务器,我们目前处于开发阶段,此服务器不会与实际用户一起使用。问题可能出在服务器上,我只是想确保我的代码中没有丢失任何东西。 – Johanna