首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUrlConnection,http-post和session

NSUrlConnection,http-post和session
EN

Stack Overflow用户
提问于 2013-12-04 21:05:29
回答 2查看 1.2K关注 0票数 0

我有一个关于NSUrlConnection和http会话的问题。我需要用POST打电话给httpS url。我试过这个代码:

代码语言:javascript
复制
NSString *bodyData = @"selectTipoVeicolo=A&inputTarga=EN784DC";
NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.theUrl.com"]];


[postRequest setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];

    // Designate the request a POST request and specify its body data
    [postRequest setHTTPMethod:@"POST"];
    [postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]];

    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:postRequest
                                                                  delegate:self];

    [connection start];

但是我获得了一个包含以下消息的html页面:

你的会议已经超时了。Web应用程序存储有关您在服务器上正在执行的操作的信息。此信息称为会话。 Web服务器必须跟踪许多、多个会话。如果您不活动足够长的时间(通常是几分钟),此信息将被丢弃,以便为活动用户腾出空间。 此时,您可以重新启动会话以继续。

编辑

服务器响应:

<NSHTTPURLResponse: 0x8ad8400> { URL: theHost.com/http://voas.theHost.com:7777/… } { status code: 200, headers { "Cache-Control" = private; Connection = "Keep-Alive"; "Content-Length" = 2383; "Content-Type" = "text/html;charset=UTF-8"; Date = "Wed, 04 Dec 2013 21:21:52 GMT"; "Keep-Alive" = "timeout=50,max=9"; Server = "Oracle-Application-Server-10g/9.0.4.3.0 Oracle-HTTP-Server OracleAS-Web-Cache-10g/9.0.4.3.0 (N)"; "Set-Cookie" = "text cookie"; } }

我怎样才能避免这个问题?我需要什么?

EN

回答 2

Stack Overflow用户

发布于 2013-12-04 21:16:32

还可以通过捕获响应来检查服务器在标头中返回的内容:

代码语言:javascript
复制
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
     _data = [[NSMutableData alloc] init];
    _response = (NSHTTPURLResponse*) response;
}

您可以在这里或在connectionDidFinishLoading中检查响应变量。这应该能给你一些关于缺失部分的线索。就目前情况而言,这可能是一个服务器问题,并且还不清楚客户端需要发送什么。

顺便说一句,不需要启动连接。init方法已经启动它。从医生那里:

返回初始化的URL连接,并开始加载URL请求的数据。

票数 1
EN

Stack Overflow用户

发布于 2013-12-04 21:32:16

至少有三个问题:一个错误、一个可能的改进和一个潜在的问题:

  1. application/x-www-form-urlencoded MIME类型没有参数。(我想知道这是从哪里来的) postRequest setValue:@“application/x form-urlencoded charset=utf-8”forHTTPHeaderField:@“Content”; application/x-www-form-urlencoded MIME类型根本没有参数:不能指定字符集参数。如果,参数必须用分号;分隔。 所以,试着: postRequest setValue:@“application/x form-urlencoded”forHTTPHeaderField:@“Content”;
  2. 设置主体长度时,需要以字节为单位设置长度: 这是你的代码: [postRequest setHTTPBody:[NSData dataWithBytes:bodyData UTF8String length:strlen(bodyData UTF8String)]; 可以更有效地编写: NSString* encodedString =. //确保正确的编码!NSData* postData = encodedString数据使用编码:NSUTF8字符串编码;
  3. 您需要确保您的身体是正确编码的内容类型。 目前,您的数据等于: @"selectTipoVeicolo=A&inputTarga=EN784DC“ 这是正确的编码。但手工正确编码容易出错。我建议为此实现一个助手方法。见此处:How to send multiple parameterts to PHP server in HTTP post
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20385938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档