Afnetworking - post json - > 400坏请求

时间:2016-06-10 14:52:24

标签: ios objective-c salesforce afnetworking-3

我在ios应用中使用salesforce live agent rest api,试图请求聊天但总是失败并且400请求不是有效的ChasitorInit

NSDictionary *parameters =@{     @"SessionId"          :self.sessionId,
                                 @"OrganizationId"     :ORG_ID,
                                 @"deploymentId"       :DEPLOYEMENT_ID,
                                 @"buttonId"           :BUTTON_ID,
                                 @"userAgent"          :USER_AGENT,
                                 @"language"           :LANG,
                                 @"screenResolution"   :SCREEN_RES,
                                 @"visitorName"        :@"Test Visitor",
                                 @"prechatDetails"     :@[],
                                 @"prechatEntities"    :@[],
                                 @"receiveQueueUpdates":@"true",
                                 @"isPost"             :@"true"
                             };

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = serializer;

[manager.requestSerializer setValue:self.sessionKey forHTTPHeaderField:X_LIVEAGENT_SESSION_KEY];
[manager.requestSerializer setValue:@"null" forHTTPHeaderField:X_LIVEAGENT_AFFINITY];
[manager.requestSerializer setValue:@"1" forHTTPHeaderField:X_LIVEAGENT_SEQUENCE];
[manager.requestSerializer setValue:API_V forHTTPHeaderField:X_LIVEAGENT_API_VERSION];

manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:ChasitorInit_path parameters:parameters progress:nil
      success:^(NSURLSessionDataTask *task, id responseObject) {
          NSError* error;
          NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject
                                                               options:kNilOptions
                                                                 error:&error];
      } failure:^(NSURLSessionDataTask *task, NSError *error) {

          NSLog(@"Error: %@", error);
      }];

我正在使用Afnetworking v3 ios8 请求正文应该是

{
"sessionId": "8f1cfb18-fbd1-4487-90d-e98c0a84e165",
"organizationId": "00D58000000OwMB",
"deploymentId": "57258000000L1mj",
"buttonId": "57358000000L24F",

"userAgent": "",
"language": "en-US",
"screenResolution": "1900x1080",
"visitorName": "Test Visitor",
"prechatDetails": [],
"prechatEntities": [],
"receiveQueueUpdates": true,
"isPost": true

}

我做错了什么? Plz纠正我!!

2 个答案:

答案 0 :(得分:1)

400错误的请求意味着,您没有像服务器期望的那样形成请求。

检查服务器日志中是否有问题...

可能需要另一种形式的数据..

并尝试检查,您没有将空值传递给服务器..

尝试这样:

 NSString *Loginurl = [NSString stringWithFormat:@"http://Enter your URL Here"];

    NSDictionary *params = @{     @"SessionId"          :self.sessionId,
                                 @"OrganizationId"     :ORG_ID,
                                 @"deploymentId"       :DEPLOYEMENT_ID,
                                 @"buttonId"           :BUTTON_ID,
                                 @"userAgent"          :USER_AGENT,
                                 @"language"           :LANG,
                                 @"screenResolution"   :SCREEN_RES,
                                 @"visitorName"        :@"Test Visitor",
                                 @"prechatDetails"     :@{},
                                 @"prechatEntities"    :@{},
                                 @"receiveQueueUpdates":@"true",
                                 @"isPost"             :@"true"
                             };

    NSLog(@"Sent parameter to server : %@",params);

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];



    manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];


    manager.responseSerializer = [AFHTTPResponseSerializer serializer];


    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",nil];

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/plain",nil];

[manager.requestSerializer setValue:self.sessionKey forHTTPHeaderField:X_LIVEAGENT_SESSION_KEY];
[manager.requestSerializer setValue:@"null" forHTTPHeaderField:X_LIVEAGENT_AFFINITY];
[manager.requestSerializer setValue:@"1" forHTTPHeaderField:X_LIVEAGENT_SEQUENCE];
[manager.requestSerializer setValue:API_V forHTTPHeaderField:X_LIVEAGENT_API_VERSION];

            AFSecurityPolicy* policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

    [policy setValidatesDomainName:NO];

    [policy setAllowInvalidCertificates:YES];



    [manager POST:Loginurl parameters:params progress:nil success:^(NSURLSessionTask *task, id responseObject) {

        NSLog(@"Response from server :  %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);



        _str=[[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];


        NSLog(@"%@",_str);


        [self getdata:responseObject];



    } failure:^(NSURLSessionTask *operation, NSError *error)

     {

         NSLog(@"Error: %@", error);
     }];    
 }

#pragma mark-DataFromServer

-(void)getdata:(NSDictionary*)RegisterData

{


}

答案 1 :(得分:1)

我的应用中出现了同样的错误。我通过删除请求和响应序列化程序来解决它。仅使用参数实例化管理器和调用post方法。

reqManager = [AFHTTPRequestOperationManager manager];
[reqManager POST:URLString parameters:parameters progress:nil
      success:^(NSURLSessionDataTask *task, id responseObject) {

      } failure:^(NSURLSessionDataTask *task, NSError *error) {

          NSLog(@"Error: %@", error);
      }];