【问题标题】:Twitter API 1.1 - update_with_media returns 500Twitter API 1.1 - update_with_media 返回 500
【发布时间】:2014-02-26 09:40:36
【问题描述】:

我正在尝试使用 REST API 1.1(网址:https://api.twitter.com/1.1/statuses/update_with_media.json)从 Mac 应用程序在 Twitter 上上传图片,但我总是收到错误代码 500 和 {"errors":[{"message":"内部错误","代码":131}]}。 如果我只上传一条推文(使用 /update.json),它每次都能正常工作。

这是我的代码:

NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update_with_media.json"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0f];
[request setHTTPMethod:@"POST"];
[request setHTTPShouldHandleCookies:NO];

NSString *boundary = @"64F3EC90-E32B-4BD9-ADB4-E1A9FBE4AFD6";

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];

[self signRequest:request];  // Adding Oauth

NSMutableData *body = [NSMutableData dataWithLength:0];

// Adding tweet string
[body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
NSData *data = [[NSString stringWithFormat:@"%@\r\n",@"Uploading again test3"]dataUsingEncoding:NSUTF8StringEncoding];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",@"status"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:data];

// Adding image
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"media[]\"; filename=\"test.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Transfer-Encoding: binary\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];

[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

// Set HTTPBody
[request setValue:@(body.length).stringValue forHTTPHeaderField:@"Content-Length"];
request.HTTPBody = body;

【问题讨论】:

    标签: objective-c image twitter upload


    【解决方案1】:

    我很幸运得到了以下代码:

    - (void)postTweet:(NSString *)tweetString withImageData:(NSData *)imageData {

    NSURL *baseURL = [NSURL URLWithString:url_statuses_update_with_media];
    
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"status"] = tweetString;
    params[@"media[]"] = imageData;
    
    [self sendPOSTRequestForURL:baseURL andParams:params];}                                    
    

    -(NSError *)sendPOSTRequestForURL:(NSURL *)url andParams:(NSDictionary *)params { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0f]; [request setHTTPMethod:@"POST"]; [request setHTTPShouldHandleCookies:NO];

    NSString *boundary = @"64F3EC90-E32B-4BD9-ADB4-E1A9FBE4AFD6";
    
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data;boundary=%@",boundary];
    [请求 setValue:contentType forHTTPHeaderField:@"Content-Type"];
    
    [自签名请求:请求];
    
    NSMutableData *body = [NSMutableData dataWithLength:0];
    
    for (NSString *key in params.allKeys) {
        id obj = 参数 [键];
    
        [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    
        NSData *data = nil;
    
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",key] dataUsingEncoding:NSUTF8StringEncoding]];
    
        if ([obj isKindOfClass:[NSData 类]]) {
            [body appendData:[@"Content-Type: application/octet-stream\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
            数据 = (NSData *)obj;
        } else if ([obj isKindOfClass:[NSString class]]) {
    
            数据 = [[NSString stringWithFormat:@"%@",(NSString *)obj]dataUsingEncoding:NSUTF8StringEncoding];
        }
    
        [正文 appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        [正文附加数据:数据];
        [正文 appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    }
    
    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    
    
    [请求 setValue:@(body.length).stringValue forHTTPHeaderField:@"Content-Length"];
    请求.HTTPBody = 正文;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 2014-08-02
      • 2014-08-11
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多