Las requestes de Twitter OAuth 1 POST no funcionan

Estoy creando una aplicación para iOS y estoy usando esta biblioteca OAuth . Las requestes GET parecen funcionar bien, pero tan pronto como trato de hacer requestes POST, obtengo el siguiente error:

[código 32] No se pudo autenticar

Ahora no estoy completamente seguro de lo que está sucediendo, ya que las requestes de POST se generan de manera bastante similar a las requestes GET. ¿Alguna idea de qué está causando este error?

Aquí está el código que genera la request:

+ (NSURLRequest *)prepanetworkingRequestForPath:(NSString *)path parameters:(NSDictionary *)queryParameters HTTPmethod:(NSString *)HTTPmethod oauthToken:(NSString *)oauth_token oauthSecret:(NSString *)oauth_token_secret { if (!HTTPmethod || !oauth_token) return nil; NSMutableDictionary *allParameters = [self standardOauthParameters]; allParameters[@"oauth_token"] = oauth_token; if (queryParameters) [allParameters addEntriesFromDictionary:queryParameters]; NSString *parametersString = CHQueryStringFromParametersWithEncoding(allParameters, NSUTF8StringEncoding); NSString *request_url = API_URL; if (path) request_url = [request_url stringByAppendingString:path]; NSString *oauth_consumer_secret = CONSUMER_SECRET; NSString *baseString = [HTTPmethod stringByAppendingFormat:@"&%@&%@", request_url.utf8AndURLEncode, parametersString.utf8AndURLEncode]; NSString *secretString = [oauth_consumer_secret.utf8AndURLEncode stringByAppendingFormat:@"&%@", oauth_token_secret.utf8AndURLEncode]; NSString *oauth_signature = [self.class signClearText:baseString withSecret:secretString]; allParameters[@"oauth_signature"] = oauth_signature; NSString *queryString; if (queryParameters) queryString = CHQueryStringFromParametersWithEncoding(queryParameters, NSUTF8StringEncoding); if (queryString) request_url = [request_url stringByAppendingFormat:@"?%@", queryString]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:request_url]]; request.HTTPMethod = HTTPmethod; NSMutableArray *parameterPairs = [NSMutableArray array]; [allParameters removeObjectsForKeys:queryParameters.allKeys]; for (NSString *name in allParameters) { NSString *aPair = [name stringByAppendingFormat:@"=\"%@\"", [allParameters[name] utf8AndURLEncode]]; [parameterPairs addObject:aPair]; } NSString *oAuthHeader = [@"OAuth " stringByAppendingFormat:@"%@", [parameterPairs componentsJoinedByString:@", "]]; [request setValue:oAuthHeader forHTTPHeaderField:@"Authorization"]; if ([HTTPmethod isEqualToString:@"POST"] && queryParameters != nil) { NSData *body = [queryString dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:body]; } return request; } 

EDITAR

Las últimas líneas del código donde establezco el cuerpo HTTP parecen causar el problema. Cuando elimino las líneas

  NSData *body = [queryString dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:body]; 

todo funciona bien, excepto cuando los parameters son excepcionalmente más grandes, como enviar una image codificada en base64, donde obviamente falla … ¿Qué podría hacer para arreglar esto?

Bien…

No sé qué causa exactamente. No se puede enviar un post privado a un no-seguidor.

¿Qué hay de la console de API ? Puede probar las API de Twitter. tal vez bueno para ti

Primero pruebes Direct Message API correctamente. y luego compare los resultados entre API Console y sus códigos.

Solucioné el problema agregando los siguientes campos del encabezado HTTP:

 [request setValue:@"api.twitter.com" forHTTPHeaderField:@"X-HostCommonName"]; [request setValue:@"api.twitter.com" forHTTPHeaderField:@"Host"]; [request setValue:@"https://api.twitter.com" forHTTPHeaderField:@"X-Target-URI"]; [request setValue:@"Keep-Alive" forHTTPHeaderField:@"Connection"];