2011-11-18 45 views
0

我已經搜索了這個問題,發現了類似的問題,但沒有人喜歡它。從iPhone發送多部分請求到Ruby on Rails(RoR)服務器

我建立一個請求,以手動

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:TEST_URL]]; 
[request setHTTPMethod:@"POST"]; 

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

NSMutableData *body = [NSMutableData data]; 
[body appendData:[[NSString stringWithFormat:@"--%@\r\n\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=upload[jsondata]\r\n\n Content-Type: application/octet-stream\r\n\r\n", [dateFormatter stringFromDate:startDate]] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[json dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[request setHTTPBody:body]; 

當這個請求到達軌道服務器,它理解內容處置,內容類型,但身體的一部分JSON被捕獲爲「ActionDispatch :: Http :: UploadedFile「,這意味着服務器不理解JSON,並將它看作是一個文件。

我在做什麼錯?這是從iOS設備發送併發送到Rails服務器的請求的問題嗎?某種錯誤?我已經嘗試了ASIHTTPRequest,結果相同。

回答

1

我用非常簡單的方法解決了這個問題。我不得不刪除

Content-Type: application/octet-stream 

從身體,我不得不添加連接:保持活動的要求,就像這樣:

[request setValue:@"Keep-Alive" forHTTPHeaderField:@"Connection"]; 

我想它聽接收計算機上的請求後,使用WireShark並且注意到連接被設置爲默認關閉。