0

首先,我查看了如何发出发布请求,并阅读了多个线程和有关如何创建一个的文档,但是我的数据似乎不起作用。我有两个字段,说 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 处理非常陌生,所以请原谅我对这个主题缺乏了解。谢谢你的时间!

4

5 回答 5

0

我相信您的表单 URL 编码不正确。我相信解决方案如下

[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 数据字符串进行了编码。

希望这会有所帮助!

于 2014-03-10T00:05:36.240 回答
0

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

于 2014-02-12T20:17:48.453 回答
0

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

当在您的代码中使用具有内容类型application/x-www-form-urlencoded的参数时,我建议将您的参数创建为(未编码的)NSString键/值对,创建一个NSDictionary对象并使用此处答案中描述的以下辅助方法(如何将多个参数发送到 PHP HTTP post 中的服务器)创建一个正确编码的参数字符串,您可以将其添加到正文中。

于 2014-02-12T22:06:36.197 回答
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()
    }
}
于 2017-10-02T13:40:43.530 回答
-1

你的代码对我有用。你记得跑步[connection start];吗?

于 2014-02-12T20:33:00.010 回答