Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Twitter OAuth 1 POST请求不起作用_Ios_Objective C_Twitter_Oauth_Twitter Oauth - Fatal编程技术网

Ios Twitter OAuth 1 POST请求不起作用

Ios Twitter OAuth 1 POST请求不起作用,ios,objective-c,twitter,oauth,twitter-oauth,Ios,Objective C,Twitter,Oauth,Twitter Oauth,我正在为iOS创建一个应用程序,我正在使用它。GET请求似乎工作正常,但当我尝试发出POST请求时,就会出现以下错误: [代码32]无法验证您的身份 现在我不太清楚发生了什么,因为POST请求的生成与GET请求非常相似。知道是什么导致了这个错误吗 以下是生成请求的代码: + (NSURLRequest *)preparedRequestForPath:(NSString *)path parameters:(NSDictionary *

我正在为iOS创建一个应用程序,我正在使用它。GET请求似乎工作正常,但当我尝试发出POST请求时,就会出现以下错误:

[代码32]无法验证您的身份

现在我不太清楚发生了什么,因为POST请求的生成与GET请求非常相似。知道是什么导致了这个错误吗

以下是生成请求的代码:

+ (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;
}
编辑 我设置HTTP主体的代码的最后几行似乎导致了这个问题。当我拆下这些线的时候

 NSData *body = [queryString dataUsingEncoding:NSUTF8StringEncoding];
 [request setHTTPBody:body];
一切正常,除非参数异常大,比如发送base64编码的图像,显然失败了。。。我能做些什么来解决这个问题

我不知道到底是什么原因造成的

怎么样?它可以用于测试Twitter API。也许对你有好处


首先,以正确的方式测试直接消息API。然后比较API控制台和代码之间的结果。

我通过添加以下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"];

您是使用同步还是异步NSURLConnection来检索此NSURLRequest?@ModernCarpentry我是异步请求的。@此处的查询参数是什么?我能够发送消息,我只是说,罪魁祸首不能是许可证,因为如果我可以直接获得信息,那么我肯定必须能够发出发帖请求。。。但我要检查一下控制台,这可能会对我有所帮助,我会尝试一下,稍后再回来。你能在返回“request”时打印“queryString”和“request\u url”吗?我有个问题!”当方法向setBody键入“POST”时,queryString“编码UTF8两次。为什么不使用。已经存在Objective-C库。有什么原因吗?我使用的是一个库,这段代码来自库。如果我记录返回请求的正文
NSLog(@“body=%@,[[NSString alloc]initWithData:preparedRequest.HTTPBody encoding:NSUTF8StringEncoding])我从twitter上获得了一个“body=id=33695934630829698”的示例值。开发者推特→ 家→ 我的应用程序,然后是你的应用程序的“设置”→ '应用程序类型'→ 选中“读、写和访问直接消息”,对吗?