【问题标题】:PUT request status code 500?PUT 请求状态码 500?
【发布时间】:2023-04-06 17:13:02
【问题描述】:

我在 Objective C 中实现了一个 PUT 请求。使用 Postman 从 iOS / Objective C 外部执行该请求时成功,但在 Objective C 中调用时返回错误(状态代码 500)。据我所知,该实现反映了在 Postman 中设置调用的方式。这是我尝试使用 Objective C 镜像的调用:

这是我在 Objective C 中的实现:

- (void)callUnregisterForPushNotifications:(NSString *)accessToken
                               pushToken:(NSString *)pushToken
                         completionBlock:(void (^)(NSMutableArray *resultsArray))completion{

    NSLog(@"UNREGISTER FOR PUSH CALLED!");

    NSLog(@"PUSH TOKEN %@", pushToken);

    NSString *appendUrl = @"alerts/unregisterpush/";

    NSLog(@"APPEND URL %@",appendUrl);

    NSURL *unregisterUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", BaseURLString, appendUrl]];
    NSLog(@"UNREGISTER URL: %@",unregisterUrl);

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:unregisterUrl
                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                       timeoutInterval:30.0];

    [request setHTTPMethod:@"PUT"];

    NSString *appendToken = [NSString stringWithFormat:@"Bearer %@", accessToken];
    NSLog(@"TOKEN: %@",appendToken);

    [request addValue:appendToken forHTTPHeaderField:@"Authorization"];

    NSString *postString = [NSString stringWithFormat:@"Guid=%@",pushToken];
    NSLog(@"POST STRING: %@",postString);
    [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];

    NSLog(@"REQUEST %@",request);

    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

                                                              NSLog(@"UNREGISTER PUSH NOTIFICATIONS RESPONSE: %@", response);
                                                              NSLog(@"UNREGISTER PUSH NOTIFICATIONS ERROR: %@", error);
                                                              NSLog(@"UNREGISTER PUSH NOTIFICATIONS DATA: %@", data);

                               NSData *_data = data;// ... whatever
                               NSMutableString *_string = [NSMutableString stringWithString:@""];
                               for (int i = 0; i < _data.length; i++) {
                                   unsigned char _byte;
                                   [_data getBytes:&_byte range:NSMakeRange(i, 1)];
                                   if (_byte >= 32 && _byte < 127) {
                                       [_string appendFormat:@"%c", _byte];
                                   } else {
                                       [_string appendFormat:@"[%d]", _byte];
                                   }
                               }
                               NSLog(@"UNREGISTER PUSH RESPONSE: %@", _string);

                               id obj= [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
                               if (!obj) {
                                    //NSLog(@"REGISTER PUSH NOTIFICATIONS ERROR: %@", error);

                               } else {
                                    //NSLog(@"REGISTER PUSH NOTIFICATIONS DATA: %@", obj);

                                   if(completion) {
                                       [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
                                       completion((NSMutableArray*)obj);
                                   }

                                   //self.accessToken = [obj valueForKey:@"access_token"];
                                   //NSLog(@"ACCESS TOKEN: %@",self.accessToken);
                               }

                           }];
}

任何输入/帮助将不胜感激,在此先感谢!

【问题讨论】:

  • 500 是“内部服务器错误”。查看服务器日志文件,您就会知道出了什么问题
  • 我收到以下错误:“处理 HTTP 请求导致异常。有关详细信息,请参阅此异常的 'Response' 属性返回的 HTTP 响应。”
  • 然后在查看我返回的响应后,它说“{"Code":null,"Message":"请联系服务器管理员!"}"
  • 尝试运行 Charles Proxy 以确保调用与手动尝试匹配。

标签: ios objective-c rest put


【解决方案1】:

这一行:

NSString *postString = [NSString stringWithFormat:@"Guid=%@",pushToken];

与您在 Postman 中显示的内容不符。

  1. 对象周围缺少{ }
  2. 字段和值周围缺少" "
  3. AcceptContent-type 标头丢失

【讨论】:

  • 你部分正确,我还需要将等号“=”更改为冒号“:”谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-05-29
  • 2020-11-27
  • 2019-11-27
  • 1970-01-01
  • 2023-01-02
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多