を要求するためにAFNetworkingを使用する場合:error ==正しい形式でないため、データを読み取れませんでした。私は、ネットワークを要求すると
[Mysevers AFPOSTWithHud:YES andAddressname:@"Common/Currency/Register" parmas:params RequestSuccess:^(id result) {
if ([result[@"status"] intValue] == 200) {
[SVProgressHUD showSuccessWithStatus:@"注册成功"];
UIViewController *temp_vc = nil;
for (UIViewController *vc in self.navigationController.childViewControllers) {
if ([vc isKindOfClass:[HomeVC class]]) {
temp_vc = vc;
break;
}
}
if (temp_vc == nil) {
return;
}
[self.navigationController popToViewController:temp_vc animated:YES];
}else {
[SVProgressHUD showErrorWithStatus:@"注册失败"];
}
} failBlcok:^{
SVNoNet;
}];
私はネットワークを要求したとき、私はエラーを取得:
[Mysevers AFPOSTWithHud:andAddressname:parmas:RequestSuccess:failBlcok:] _block_invoke.47] [行号:57] error ==正しい形式でないため、データを読み込めませんでした。
Myseversコードは以下の通りです:
@implementation Mysevers
+ (AFHTTPSessionManager *)sharedHTTPSession{
static dispatch_once_t onceToken;
static AFHTTPSessionManager *requestManager ;
dispatch_once(&onceToken, ^{
requestManager = [AFHTTPSessionManager manager];
requestManager.requestSerializer.timeoutInterval = 10;
requestManager.requestSerializer = [AFJSONRequestSerializer serializer]; // 添加,否则会返回500错
requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
});
return requestManager;
}
+(void)AFPOSTWithHud:(BOOL)hud andAddressname:(NSString*)addressName parmas:(NSDictionary*)parmas RequestSuccess:(void(^)(id result))success failBlcok:(void(^)(void))failBlcok
{
if (hud) {
//[HUD addHUD];
[SVProgressHUD show];
}
AFHTTPSessionManager *requestManager = [Mysevers sharedHTTPSession];
//requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
NSString *urlStr = [NSString stringWithFormat:@"%@%@",BASE_URL,addressName];
DLog(@"%@",urlStr);
[requestManager POST:urlStr parameters:parmas progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (hud) {
//[HUD removeHUD];
[SVProgressHUD dismiss];
}
success(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (error != nil) {
DLog(@"error==%@",[error localizedDescription]);
if (hud) {
//[HUD removeHUD];
[SVProgressHUD dismiss];
}
failBlcok();
}
return ;
}];
}
注意は、私のacceptableContentTypesは以下の通りです:
requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]
更新
私はこれに私のsharedHTTPSessionを変更:
+ (AFHTTPSessionManager *)sharedHTTPSession{
static dispatch_once_t onceToken;
static AFHTTPSessionManager *requestManager ;
dispatch_once(&onceToken, ^{
requestManager = [AFHTTPSessionManager manager];
requestManager.requestSerializer.timeoutInterval = 10;
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setStringEncoding:NSUTF8StringEncoding];
requestManager.requestSerializer=serializer;
//requestManager.requestSerializer = [AFJSONRequestSerializer serializer]; // 添加,否则会返回500错
requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
});
return requestManager;
}
それでもこのエラーが発生します。
PHPerは$_POST
を空の配列として出力します。
(lldb) po result
{
data = "";
msg = 2001;
status = 400;
}
結果はmsg
は彼がちょうど$_POST
が空で、定義されている、PHPerが私に戻っています。
ATTENTION -2マイAFHTTPSessionManager.m
で
、Iは要求ヘッダーに行を追加します。私の
AFHTTPSessionManager.m
で
#pragma mark - add by me
[request addValue:API_KEY forHTTPHeaderField:@"PUBLICKEY"];
:
- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress
success:(void (^)(NSURLSessionDataTask *, id))success
failure:(void (^)(NSURLSessionDataTask *, NSError *))failure
{
NSError *serializationError = nil;
NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError];
#pragma mark - add by me
[request addValue:API_KEY forHTTPHeaderField:@"PUBLICKEY"];
if (serializationError) {
if (failure) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu"
dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{
failure(nil, serializationError);
});
#pragma clang diagnostic pop
}
return nil;
}
__block NSURLSessionDataTask *dataTask = nil;
dataTask = [self dataTaskWithRequest:request
uploadProgress:uploadProgress
downloadProgress:downloadProgress
completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
if (failure) {
failure(dataTask, error);
}
} else {
if (success) {
success(dataTask, responseObject);
}
}
}];
return dataTask;
}
更新-3
Iは、以下に、すべての印刷情報を置く:
2017年5月6日18:03:31.685086 KYGM [15582:531703] systemgroupため[MC]システムグループコンテナを.com.apple.configurationprofilesパスは/Users/luowensheng/Library/Developer/CoreSimulator/Devices/2FACECB7-2E7A-4E8C-8AF5-179ED7344D93/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017- 05-06 18:03:31.686106 KYGM [15582:531703] [MC]個人的な有効なユーザー設定からの読み取り。
2017-05-06 18:03:39.568 KYGM [15582:531703] [ユーザー名:/ユーザー/デスクトップ/ company_project/KYGM/KYGM/Utils/LML/LMLUtils/Mysevers。M] [函数名:+ [Mysevers AFPOSTWithHud:andAddressname:parmas:RequestSuccess:failBlcok:] [行号:47] http://192.168.3.103:8003/Common/Currency/Register
更新-04
Iを使用する場合postman
をリクエストすると、私は成功します。
フォームデータが理由である場合、私は知りません。コードの下
試み:私はあなたの郵便配達ののparam-データ型がform-data
です見つけるので、私はあなたがAFNetworkingのフォーム提出方法を使用すべきだと思う
間違ってどのような形式では、それを何ですか? – vadian
@vadian私は 'シリアライザ'を 'utf-8'に設定しましたが、それでもエラーが出ます。 –
'utf8'はフォーマットではありません。 – vadian