Twitter API 1.1 - update_with_media返回500 [英] Twitter API 1.1 - update_with_media returns 500

查看:81
本文介绍了Twitter API 1.1 - update_with_media返回500的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to upload a picture on Twitter from a Mac app, using REST API 1.1 (url: https://api.twitter.com/1.1/statuses/update_with_media.json), but I get always error code 500 and {"errors":[{"message":"Internal error","code":131}]}. If I upload only a tweet (using /update.json) it works fine every time.

这是我的代码:

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;


推荐答案

我对以下代码感到满意:

I had luck with the following code:


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

- (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];
[请求setHTTPMethod:@POST];
[请求setHTTPShouldHandleCookies:否];

-(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];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];

[self signRequest:request];

NSMutableData *body = [NSMutableData dataWithLength:0];

for (NSString *key in params.allKeys) {
    id obj = params[key];

    [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 class]]) {
        [body appendData:[@"Content-Type: application/octet-stream\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        data = (NSData *)obj;
    } else if ([obj isKindOfClass:[NSString class]]) {

        data = [[NSString stringWithFormat:@"%@",(NSString *)obj]dataUsingEncoding:NSUTF8StringEncoding];
    }

    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:data];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
}

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


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

这篇关于Twitter API 1.1 - update_with_media返回500的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆