2012-03-16 77 views
0

我正面臨一個奇怪的行爲。我用下面的代碼使用POST方法來發送一個HTTP請求 向服務器RKClient POST方法和特殊字符

[[RKClient sharedClient] post:[NSString stringWithFormat:@"api"] 
          params:aDict 
         delegate:self]; 

持有的值的字典爲如下:

NSDictionary *comment = [NSDictionary dictionaryWithObjects:[NSArray 
arrayWithObjects:@"wallcomment", [self.wall 
valueForKey:@"wallMessageId"], [self.textView text], nil] 
                 forKeys: 
[NSArray arrayWithObjects:@"a01call", @"a01wall_message_id", 
@"a01comment", nil]]; 

當[self.textView文本]是用法語單詞加口音 服務器收到錯誤的編碼:「Test @ vrification caractèresspéciaux」

我不會在發佈之前操作textview文本,所以編碼是也UTF8。

當我檢查POST標題時,內容類型不具有編碼類型。我試圖用下面的方法添加它,但不添加:

- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)header 

我在文檔中沒有看到任何特殊的方法或屬性?

我使用RestKit 0.9.3

+0

這可能很明顯,但在調用* post *之前,需要調用* setValue:forHTTPHeaderField:*。如果你正確地做到了這一點,那麼在RKClient.m中調試第216行,看看你的頭文件在哪裏。 – lawicko 2012-03-16 12:58:37

+0

我記得我試圖設置HTTPHeader字段添加UTF-8編碼與內容類型,但是當我檢查標題值內容類型仍然應用程序/ x-www-form-urlencoded – Appsido 2012-03-16 15:04:34

+0

這裏的重要信息是**當你打電話給* post *之前或之後,你是否設置了標題?如果之前,它仍然沒有設置,那麼就像我之前說過的那樣調試216行。 – lawicko 2012-03-16 15:09:54

回答

2

這樣做:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"api" delegate:self block:^(RKObjectLoader *loader) { 
    [loader setAdditionalHTTPHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"application/x-www-form-urlencoded;charset=UTF-8", @"Content-Type", nil]]; 
}]; 

不要忘記,如果你需要任何添加其他頭。

經歷RestKit代碼,同時,我注意到一個額外的東西,RKObjectManager行222:

loader.method = RKRequestMethodGET; 

所以不要驚訝,你的方法是GET,POST不是。如果你真的需要POST(我認爲你不需要),那麼改變塊中的方法。