2012-05-04 15 views
0

ファイル解析のためにエコーネストを送信しようとしています。 POSTメソッドは他のメソッドと違いはありません。私はそれがエコーに依存しないと信じています。AFNetworking POSTファイルが失敗する(echonest?)

ここにはドキュメントがあります。私は "アップロード"の部分が必要です。

http://developer.echonest.com/docs/v4/track.html

NSURLRequest *request = [self multipartFormRequestWithMethod:@"POST" path:[NSString stringWithFormat:@"track/upload", self.apiKey] parameters:dictionary constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

    [formData appendPartWithFileData:data name:@"track" fileName:[path lastPathComponent] mimeType:@"multipart/form-data"]; 
}]; 
AFURLConnectionOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"done"); 
    NSLog(@"response: %@", operation.responseString); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"error: %@", error.description); 
    NSLog(@"response: %@", operation.responseString); 
    NSLog(@"headers: %@", operation.request.allHTTPHeaderFields.description); 
    NSLog(@"operation url: %@", operation.request.URL.absoluteString); 
}]; 

しかし、私は問題を抱えています。ここに私の応答があります:

{"response": {"status": {"version": "4.2", "code": 4, "message": "track - Missing Parameter: track or url is required with a POST content-type of \"application/x-www-form-urlencoded\" or \"multipart/form-data\""}}} 

私はすでに "track"パラメータを私が初期化したデータとしていると思いました。誰でも助けてくれますか?

+1

CharlesProxyを使用して、実際にワイヤで送信しているものを確認します。 – JosephH

+0

私の問題は解決していませんが、あなたが私に非常に有益なプログラムを示したので+1します。 – csotiriou

+0

まあ、それは私が推測するスタートです:-) charlesproxy出力は、あなたが 'トラック'セクションを送信していることを示していますか?もしそうでなければ、あなたの「カール」の例はうまくいくのですか?もしそうであれば、カールとあなたのコードについてcharlesproxyのショーを比較してください。 – JosephH

答えて

2

数週間前に同じ問題が発生しました。そして、私が見つけたものがここにあります。 AFNetworkingは、multipart/form-data要求を多少間違っています。

static inline NSString * AFMultipartFormFinalBoundary() { 
    return [NSString stringWithFormat:@"%@--%@--%@%@", kAFMultipartFormCRLF, kAFMultipartFormBoundary, kAFMultipartFormCRLF, kAFMultipartFormCRLF]; 
} 

AFHTTPClient.mファイルで

は、彼らは要求の最終境界の終わりに二回kAFMultipartFormCRLFを置きます。 しかし、Echonestは、multipart/form-data投稿要求の終わりに1つのCRLFでのリクエストを除いてのみです。 HTTPプロトコルの標準でどちらが正しいのか分かりませんが、そのコード行を修正すると(kAFMultipartFormCRLFを削除しても)、コードはうまくいくと思います。

この回答を書いている間、私は現在のAFNetworking Gitリポジトリを調査し、わずか5日前にこの欠陥が修正されていることを発見しました。だから私はあなたが問題を解決するために最新のソースコードを使用することができますね。

関連する問題