1

这是我的问题:

我正在从 iOS 设备向我的服务器发送 base64 编码数据。但有时,数据似乎分成两个请求到达。

在设备方面,我这样做:

NSString *base64Data = [self base64forData:myData];
NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:myRequestURL]; //like www.myaddress.com/myPHP.php

[myRequest setHTTPMethod:@"POST"];

[myRequest setHTTPBody:[[NSString stringWithFormat:@"mydata=%@&type=%d",base64Data] dataUsingEncoding:NSASCIIStringEncoding]];

NSError *error = nil;
NSURLResponse *response = nil;
NSData *result = [NSURLConnection sendSynchronousRequest:myRequest returningResponse:&response error:&error];

这是编码功能:

- (NSString*)base64forData:(NSData*)theData {

    const uint8_t* input = (const uint8_t*)[theData bytes];
    NSInteger length = [theData length];

    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    NSMutableData* data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
    uint8_t* output = (uint8_t*)data.mutableBytes;

    NSInteger i,i2;
    for (i=0; i < length; i += 3) {
        NSInteger value = 0;
        for (i2=0; i2<3; i2++) {
            value <<= 8;
            if (i+i2 < length) {
                value |= (0xFF & input[i+i2]);
            }
        }

        NSInteger theIndex = (i / 3) * 4;
        output[theIndex + 0] =                    table[(value >> 18) & 0x3F];
        output[theIndex + 1] =                    table[(value >> 12) & 0x3F];
        output[theIndex + 2] = (i + 1) < length ? table[(value >> 6)  & 0x3F] : '=';
        output[theIndex + 3] = (i + 2) < length ? table[(value >> 0)  & 0x3F] : '=';
    }

    return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
}

在我的服务器端,在 myPHP.php 中,我使用 :$_REQUEST['mydata'];$_REQUEST['type'];file_get_contents('php://input');检索我的数据。

如果出现问题,第一次,php 获取 HTTPBody 的第一部分。然后,随着请求的结束,它第二次调用。我可以看到file_get_contents('php://input');没有完全收到我的 HTTPBody。例如,我可以mydata在第一次通话中收到 of 的一部分,然后在mydatawith结束时收到type

如果我发送:

mydata=blablabla&type=totototo

我可以收到它分为

mydata=blab
labla&type=tototo

是设备端的问题吗?在base64中转换数据有问题吗?使用 NSASCIIStringEncoding 设置 HTTPBody ?特殊字符破坏了我的服务器检索到的数据?

欢迎任何帮助。

4

0 回答 0