在iOS中创建发布请求

时间:2014-02-12 20:10:09

标签: ios post nsurlconnection nsurlconnectiondelegate

首先,我已经查找了如何发布帖子请求并阅读了有关如何创建一个帖子的多个帖子和文档,但是我的数据似乎不起作用。 我有两个字段说x和html我想要调用callname。 GET形式将是www.someserver.com/callname?x=something&y=something 这是我的POST代码到目前为止的样子:

NSString *baseURLString = @"http://www.someserver.com/callname"
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[[NSURL URLWithString:baseURLString] standardizedURL]];
NSString *fields = [NSString stringWIthFormat:@"x=%@&html=%@",x,htmlSource];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[NSData dataWithBytes:[fields UTF8String] length:strlen([fields UTF8String])]];

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

NSURLConnection委托方法如此实施

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    NSLog(@"Data Received");
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 
    NSLog(@"Error: %@" , error);
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"Connection Finished");
}

我错过了什么吗?我的代码看起来与我从编码选择中发现的大多数示例完全相同。我传递html源代码作为y的值是否重要?任何提示或提示将不胜感激。我对iOS和html处理非常陌生,所以请原谅我对这个主题缺乏了解。谢谢你的时间!

5 个答案:

答案 0 :(得分:0)

您必须实现NSURLConnection的委托协议才能获得响应。你没有发布任何代码,所以我认为这意味着你没有实现相关的方法。

答案 1 :(得分:0)

一个潜在的问题是您错过了正确的百分比编码参数:

在代码中使用内容类型为application/x-www-form-urlencoded的参数时,我建议您将参数创建为(未编码的)NSString键/值对,创建一个NSDictionary对象和使用以下答案(How to send multiple parameterts to PHP server in HTTP post)中描述的以下帮助方法,该方法创建一个正确编码的参数字符串,您可以将其添加到正文中。

答案 2 :(得分:0)

我认为您的表单网址编码不正确。我相信解决方案如下

[serviceRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

如果您想对UTF-8进行编码,您需要先执行此操作,例如,

NSString *postLength = [NSString stringWithFormat:@"%d", [_xmlDoc length]]; //Calculating the Content Length
    NSData *postData = [_xmlDoc dataUsingEncoding:NSUTF8StringEncoding]; // preparing XML to be sent in POST

请注意,您提前对POST数据字符串进行编码。

希望这有助于!!

答案 3 :(得分:0)

class Requests {

    class func loginRequest(userName:String, password:String, completion: @escaping ((JSON?, String?) -> ()) )
    {
        var request = URLRequest(url: URL(string: "your URL")!)
        request.httpMethod = "POST"
          //parameters
        let postString = "user_login=\(userName)&user_pass=\(password)"
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { 
            data, response, error in guard error == nil else {
                print(error!)
                completion(nil, error!.localizedDescription)
                return
            }
            guard let data = data else {
                completion(nil, "location not found")
                return
            }
            let jsonData = JSON(data)
            completion(jsonData, nil)
        }
        task.resume()
    }
}

答案 4 :(得分:-1)

您的代码适合我。你还记得运行[connection start];吗?

相关问题