gpt4 book ai didi

ios - 如何在 iOS 中以 url 的形式发布数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:17:11 26 4
gpt4 key购买 nike

我想将我的 UITextfields 数据发送到服务器。

我想发布数据,但服务器向我显示错误消息。

请检查我的代码:

  ...

NSURL *url=[NSURL URLWithString:@"http://projectsatseoxperts.net.au/fishing/api/postRegister.php"];

NSString *post =[[NSString alloc] initWithFormat:@"FirstName=%@&LastName=%@userName=%@&Email=%@Phone=%@&Address=%@Password=%@&ConfirmPassword=%@",
txt_firstname.text,txt_lastname.text,txt_username.text,txt_email.text,txt_phone.text,txt_address.text,txt_password.text,txt_confirmpassword.text];
NSLog(@"Post is: %@",post);

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSLog(@"postData is: %@",postData);

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSLog(@"postLength is: %@",postLength);

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
//[request setValue:@"http://projectsatseoxperts.net.au/fishing/api/postRegister.php" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

NSLog(@"request is: %@", [request allHTTPHeaderFields]);
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"urlData is: %@",urlData);

NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"%@",data);
}

发布详细信息后,值将出现在这里 - http://projectsatseoxperts.net.au/fishing/api/register.php

我们非常欢迎任何想法或建议。

最佳答案

一些观察:

  1. 您表述问题的方式似乎是在暗示您正在尝试创建一个application/x-www-form-urlencoded 请求。如果是这样,您应该相应地指定您的 Content-Type:

    [request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
  2. 如果执行 application/x-www-form-urlencoded 请求,那么您必须使用 CFURLCreateStringByAddingPercentEscapes 百分比转义您发布的数据(注意,而不是 stringByAddingPercentEscapesUsingEncoding)。如果您的任何字段包含任何保留字符,您的查询将失败。

    - (NSString *)percentEscapeURLParameter:(NSString *)string
    {
    return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
    (CFStringRef)string,
    NULL,
    (CFStringRef)@":/?@!$&'()*+,;=",
    kCFStringEncodingUTF8));
    }
  3. 此外,您的 post 字符串缺少几个 & 符号。我可能会使用字典来解决这个问题:

    NSDictionary *dictionary = @{@"FirstName"       : txt_firstname.text,
    @"LastName" : txt_lastname.text,
    @"userName" : txt_username.text,
    @"Email" : txt_email.text,
    @"Phone" : txt_phone.text,
    @"Address" : txt_address.text,
    @"Password" : txt_password.text,
    @"ConfirmPassword" : txt_confirmpassword.text};

    然后构建 post 变量,为每个值调用 percentEscapeURLParameter,如下所示:

    NSMutableArray *postArray = [NSMutableArray array];
    [dictionary enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *obj, BOOL *stop) {
    [postArray addObject:[NSString stringWithFormat:@"%@=%@", key, [self percentEscapeURLParameter:obj]]];
    }];
    NSString *post = [postArray componentsJoinedByString:@"&"];
  4. 顺便说一下,这些字段名称看起来很可疑(“userName”中的“u”为小写;通常它们都是小写字段名称)。您确定这些字段名称吗?

除此之外,您还必须向我们展示您遇到的错误。

关于ios - 如何在 iOS 中以 url 的形式发布数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20398194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com