【问题标题】:PHP POST script works with other sites but not with iOS NSURLConnectionPHP POST 脚本适用于其他网站,但不适用于 iOS NSURLConnection
【发布时间】:2015-02-22 04:34:20
【问题描述】:

我已尽力修复它,但我找不到问题所在。这是代码

iOS:

- (IBAction)login {
    NSString *post = [NSString stringWithFormat: @"user=%@&pass=%@", _username, _password];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    NSString *postLength = [NSString stringWithFormat:@"%lu", [postData length]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
    [request setURL:[NSURL URLWithString:@"http://www.example.com/login.php"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setTimeoutInterval:20.0];
    [request setHTTPBody:postData];

    [NSURLConnection connectionWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    _responseData = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [_responseData appendData:data];
    NSString *stringData = [[NSString alloc] initWithData:_responseData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", stringData);
}

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
    return nil;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

}

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

PHP:

<?php
    echo "Username: ".$_POST["user"]."<br>Password: ".$_POST["pass"];
?>

这将返回以下内容:

Username: <br>Password:

几个小时以来,我一直在试图找出问题所在。任何帮助将不胜感激。

【问题讨论】:

  • 检查 Charles Proxy 实际发送和接收的内容。

标签: php ios post nsurlconnection


【解决方案1】:

这对我来说很好用:

@interface Test : NSObject
-(void)userLogin;
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Test *test = [[Test alloc] init];
        [test userLogin];
    }
    return 0;
}

@implementation Test : NSObject
-(void)userLogin {
    NSString *user = @"test";
    NSString *pass = @"pass";

    NSString *post = [NSString stringWithFormat: @"user=%@&pass=%@", user, pass];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    NSString *postLength = [NSString stringWithFormat:@"%lu", [postData length]];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
    [request setURL:[NSURL URLWithString:@"www.example.com/login.php"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

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

    sleep(50);

    NSLog(@"%@", conn);
}

@end

PHP:

<?php
  file_put_contents('/tmp/test', print_r($_POST, true));

结果:

# cat /tmp/test
Array
(
  [user] => test
  [pass] => pass
)

【讨论】:

  • 谢谢,但没用。 PHP 脚本只是返回:Array
  • 我的剧本还是你的?我在上面发布的内容与我粘贴的内容完全相同——你运行了吗?
  • 我遇到了同样的问题。获取一个空数组...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 2011-02-16
相关资源
最近更新 更多