Sto creando un'applicazione per iOS e sto usando questo OAuth library. Le richieste GET sembrano funzionare bene ma non appena provo a fare richieste POST ottengo il seguente errore:Twitter OAuth 1 richieste POST non funzionanti
[codice 32] Impossibile autenticarti.
Ora non sono abbastanza sicuro di ciò che sta accadendo, poiché le richieste POST sono generate in modo abbastanza simile alle richieste GET. Qualche idea su cosa sta causando questo errore?
ecco il codice che genera la richiesta:
+ (NSURLRequest *)preparedRequestForPath:(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;
}
EDIT
Le ultimissime righe del codice in cui ho impostato il corpo HTTP sembrano causare il problema. Quando rimuovo le linee
NSData *body = [queryString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];
Tutto funziona bene, tranne quando i parametri sono eccezionalmente grande come l'invio di un'immagine codificata base64, dove non riesce ovviamente ... Che cosa avrei potuto fare per risolvere questo problema?
stai usando un NSURLConnection sincrona o asincrona per recuperare questo NSURLRequest? – ModernCarpentry
@ModernCarpentry Sto richiedendo in modo asincrono. –
@the_critic qual è il parametro query qui? –