使用 AFNetworking 2 将十六进制字符串作为数据发送到服务器

Posted

技术标签:

【中文标题】使用 AFNetworking 2 将十六进制字符串作为数据发送到服务器【英文标题】:Sending hex string as data to server using AFNetworking 2 【发布时间】:2014-07-22 15:35:44 【问题描述】:

假设这是有效的 CURL:

curl -s -d 726240786C722E6E6574FE3765653035356338636463616236323263383065353339616461643963643561 http://support.questprojects.com/portal/bukd.aspx?action=LOGIN

其中“726240786C722E6E6574FE3765653035356338636463616236323263383065353339616461643963643561”是十六进制字符串。如何使用 AFNetworking 2.0 实现这一点?尝试了一切,但没有成功......

我尽力了:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

NSString *url = [NSString stringWithFormat:@"%@?action=LOGIN", @"http://support.questprojects.com/portal/bukd.aspx"];

NSData *postBody = [self base64DataFromString:@"726240786C722E6E6574FE3765653035356338636463616236323263383065353339616461643963643561"];
[manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
    [formData appendPartWithFileData:postBody name:@"" fileName:@"" mimeType:@""];
 success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"Success: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];



- (NSData *)nsdataFromHexString: (NSString *)string

    NSString *command = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSMutableData *commandToSend= [[NSMutableData alloc] init];
    unsigned char whole_byte;
    char byte_chars[3] = '\0','\0','\0';
    for (int i = 0; i < ([command length] / 2); i++) 
        byte_chars[0] = [command characterAtIndex:i*2];
        byte_chars[1] = [command characterAtIndex:i*2+1];
        whole_byte = strtol(byte_chars, NULL, 16);
        [commandToSend appendBytes:&whole_byte length:1];
    
    return commandToSend;

【问题讨论】:

提供您尽最大努力提供的代码以及任何错误消息和故障描述。 已编辑问题,举例说明我是如何尝试的。 【参考方案1】:

不要对十六进制字符串进行Base64编码,只需转换为NSData

NSString *hexString = @"726240786C722E6E6574FE3765653035356338636463616236323263383065353339616461643963643561";
NSData *postData = [hexString dataUsingEncoding:NSUTF8StringEncoding];

POST 数据不需要 Base64 编码。

这是一个完整的工作示例,但没有使用 AFNetworking,因为我不熟悉它:

NSString *hexString = @"726240786C722E6E6574FE3765653035356338636463616236323263383065353339616461643963643561";
NSData *postData = [hexString dataUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:@"http://support.questprojects.com/portal/bukd.aspx?action=LOGIN"];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPBody:postData];
[urlRequest setHTTPMethod:@"POST"];
NSURLResponse *urlResponse;
NSError *error;
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&urlResponse error:&error];

NSLog(@"data (hex): %@", data);
NSLog(@"data (string): %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

NSLog 输出:

数据(十六进制): 数据(字符串):“成功”:真

注意:一定要使用 AFNetworking,它很棒!我只知道旧的 OSX/ios 方法,而且我没有安装过 AFNetworking 的项目。

【讨论】:

以上是关于使用 AFNetworking 2 将十六进制字符串作为数据发送到服务器的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法先加载文本字符串,然后使用 AFNetworking 加载图像?

AFNetworking base64 参数,字符被 NSJSONSerialization 转义

以 JSON 字符串数组形式获取 AFNetworking 响应的结果

如何将afnetworking json字典转换为字符串,然后在IOS中将字符串转换为字典?

obj-c AFNetworking 2.0 POST 请求不起作用

AFNetworking:无法从 AFHTTPRequestOperation 获取响应字符串