gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 11:15:36 24 4
gpt4 key购买 nike

您好,想使用 AFNetworking 2.0 将一些数据(字符串和文件)发送到服务器。不知何故,POST 请求(对于论坛)的数据不正确,看起来请求中的编码/序列化丢失了。由于服务器无法处理我上传的数据。

如何为请求设置编码/序列化?

我假设必须设置 URL 表单参数编码。文档说明

[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];

我尝试这样做,但我不知道如何正确地做。使用以下 Xcode 通过警告:

manager.requestSerializer = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters]; 

/.../CameraViewController.m:105:31: Incompatible pointer types assigning to 'AFHTTPRequestSerializer *' from 'NSMutableURLRequest *'

在我的源代码下面:

CameraViewController.h

#import <UIKit/UIKit.h>

@interface CameraViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

CameraViewControllerView.m

#import "CameraViewController.h"
#import "AFHTTPRequestOperationManager.h"

@interface CameraViewController ()
@property (nonatomic) int photoIsTaken;
@end

@implementation CameraViewController

// removed unecessary code for this question

- (void)upload {
NSLog(@"%s: uploader ", __FUNCTION__);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSDictionary *parameters = @{@"latitude": @"8.444444",
@"longitude": @"50.44444",
@"location": @"New York",
@"type": @"2",
@"claim": @"NYC",
@"flag": @"0",
@"file": UIImageJPEGRepresentation(self.imageView.image,0.2)};

NSString *URLString = @"http://192.168.1.157/tapp/laravel/public/foobar/upload";

manager.requestSerializer = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];

[manager POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@, %@", error, operation.responseString);
}];

[self dismissViewControllerAnimated:NO completion:nil];
}

@end

最佳答案

终于成功了。很麻烦,但现在我真的很高兴......在我的测试期间,我遇到了 Wifi 中“请求 body 流耗尽”的一些问题,这很奇怪。

下面是对我有用的代码。

- (void)upload {

// !!! only JPG, PNG not covered! Have to cover PNG as well
NSString *fileName = [NSString stringWithFormat:@"%ld%c%c.jpg", (long)[[NSDate date] timeIntervalSince1970], arc4random_uniform(26) + 'a', arc4random_uniform(26) + 'a'];
// NSLog(@"FileName == %@", fileName);

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSDictionary *parameters = @{@"lat": @"8.444444",
@"lng": @"50.44444",
@"location": @"New York",
@"type": @"2",
@"claim": @"NYC",
@"flag": @"0"};
// BASIC AUTH (if you need):
manager.securityPolicy.allowInvalidCertificates = YES;
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"foo" password:@"bar"];
// BASIC AUTH END

NSString *URLString = @"http://192.168.1.157/tapp/laravel/public/foobar/upload";

/// !!! only jpg, have to cover png as well
NSData *imageData = UIImageJPEGRepresentation(self.imageView.image, 0.5); // image size ca. 50 KB
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure %@, %@", error, operation.responseString);
}];

[self dismissViewControllerAnimated:NO completion:nil];
}

关于ios - obj-c AFNetworking 2.0 POST 请求不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143951/

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