iOS上的Twitter状态/ update_with_media返回500错误

有没有人使用新的Twitterfunction,状态/ update_with_media?
我试图用它来上传照片,并返回内部服务器错误。
我的要求如下:

*********************** start of request ************************* POST /1/statuses/update_with_media.json HTTP/1.1 Host: upload.twitter.com User-Agent: CGJ/0.9.7 CFNetwork/485.13.8 Darwin/10.6.0 X-Twitter-Client: MGTwitterEngine X-Twitter-Client-Version: 1.0 X-Twitter-Client-Url: http://mattgemmell.com/source Content-Type: multipart/form-data; boundary=--------Asrf456BGe4h Authorization: OAuth realm="", oauth_consumer_key="wEmJfFrYHMgmCGjAzHdS7Q", oauth_token="366466306-U2RDh7faJtMyi39ALIo2PooaKNT6BxHVT23UUVe4", oauth_signature_method="HMAC-SHA1", oauth_signature="Ev2RxuZbk3DiTQryIDUTPIJxYYE%3D", oauth_timestamp="1315289679", oauth_nonce="A968261D-CB8A-4E07-87AD-47AB138D332D", oauth_version="1.0", oauth_verifier="0087890" Accept: */* Accept-Language: en-us Accept-Encoding: gzip, deflate Content-Length: 4528 Connection: keep-alive ----------Asrf456BGe4h Content-Disposition: form-data; name="status" Test image uploading ----------Asrf456BGe4h Content-Disposition: form-data; name="media[]"; filename="1.png" Content-Type: image/png iVBORw0... - base64 image data ----------Asrf456BGe4h *********************** end of request ************************* 

我正在使用MGTwitterEngine,这里是产生这个请求的代码:

 - (NSString *) _uploadImage:(UIImage *)image requestType:(MGTwitterRequestType)requestType responseType:(MGTwitterResponseType)responseType { NSString *boundary = @"--------Asrf456BGe4h"; NSURL *finalURL = [NSURL URLWithString:@"http://upload.twitter.com/1/statuses/update_with_media.json"]; if (!finalURL) { return nil; } OAMutableURLRequest *theRequest = [[[OAMutableURLRequest alloc] initWithURL:finalURL consumer:self.consumer token:_accessToken realm: nil signatureProvider:nil] autorelease]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPShouldHandleCookies:NO]; // Set headers for client information, for tracking purposes at Twitter. [theRequest setValue:_clientName forHTTPHeaderField:@"X-Twitter-Client"]; [theRequest setValue:_clientVersion forHTTPHeaderField:@"X-Twitter-Client-Version"]; [theRequest setValue:_clientURL forHTTPHeaderField:@"X-Twitter-Client-URL"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; [theRequest setValue:contentType forHTTPHeaderField:@"content-type"]; // Set request body, if specified (hopefully so), with 'source' parameter if appropriate. NSMutableData *body = [NSMutableData dataWithLength:0]; [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"status\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Honeymoon application uploads image\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"media[]\"; filename=\"1.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: image/png\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:[UIImagePNGRepresentation(image) base64EncodingWithLineLength:0]] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"--%@", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [theRequest setHTTPBody:body]; [theRequest prepare]; MGTwitterHTTPURLConnection *connection; connection = [[MGTwitterHTTPURLConnection alloc] initWithRequest:theRequest delegate:self requestType:requestType responseType:responseType]; if (!connection) { return nil; } else { [_connections setObject:connection forKey:[connection identifier]]; [connection release]; } return [connection identifier]; } 

任何人都可以帮助我发现什么是错的?
提前致谢!

我已经解决了这个问题,但是我真的不知道根本原因在哪里。
那么,所做的是以下列方式更改代码:

 - (NSString *) _uploadImage:(UIImage *)image requestType:(MGTwitterRequestType)requestType responseType:(MGTwitterResponseType)responseType { NSString *boundary = @"----------------------------991990ee82f7"; NSURL *finalURL = [NSURL URLWithString:@"http://upload.twitter.com/1/statuses/update_with_media.json"]; if (!finalURL) { return nil; } OAMutableURLRequest *theRequest = [[[OAMutableURLRequest alloc] initWithURL:finalURL consumer:self.consumer token:_accessToken realm: nil signatureProvider:nil] autorelease]; [theRequest setHTTPMethod:@"POST"]; [theRequest setHTTPShouldHandleCookies:NO]; // Set headers for client information, for tracking purposes at Twitter. [theRequest setValue:_clientName forHTTPHeaderField:@"X-Twitter-Client"]; [theRequest setValue:_clientVersion forHTTPHeaderField:@"X-Twitter-Client-Version"]; [theRequest setValue:_clientURL forHTTPHeaderField:@"X-Twitter-Client-URL"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; [theRequest setValue:contentType forHTTPHeaderField:@"content-type"]; NSMutableData *body = [NSMutableData dataWithLength:0]; [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"media_data[]\"; filename=\"1.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:[UIImageJPEGRepresentation(image, 1.0) base64EncodingWithLineLength:0]] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"status\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Honeymoon uploads image\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // -------------------------------------------------------------------------------- // modificaiton from the base clase // our version "prepares" the oauth url request // -------------------------------------------------------------------------------- [theRequest prepare]; [theRequest setHTTPBody:body]; // Create a connection using this request, with the default timeout and caching policy, // and appropriate Twitter request and response types for parsing and error reporting. MGTwitterHTTPURLConnection *connection; connection = [[MGTwitterHTTPURLConnection alloc] initWithRequest:theRequest delegate:self requestType:requestType responseType:responseType]; if (!connection) { return nil; } else { [_connections setObject:connection forKey:[connection identifier]]; [connection release]; } return [connection identifier]; } 

与以前的代码有3个不同之处:
1.不同的数据顺序,意味着首先填充图像数据,然后是状态数据
2.使用media_data []键代替media []
3.准备好后调用请求集http请求体

希望这对别人有帮助。