2011-03-21 67 views
2

嘻嘻,NSURLRequest問題

我的NSURLRequest HTTP POST出現問題,我無法找出問題所在。

這是我的服務器端的PHP:

<html> 
<head> 
</head> 
<body> 
    <?php 
     if (! isset($_POST['sometext'])) { 
      echo "NOT SET"; 
     } else { 
      echo $_POST['sometext']; 
     } 
    ?> 
</body></html> 

這是我的目標C代碼發佈數據:

NSString *urlString = @"http://localhost:8888/postpage"; 
NSURL *url = [[NSURL alloc] initWithString:urlString]; 
NSMutableURLRequest *urlRequest=[NSMutableURLRequest requestWithURL:url]; 

[url release]; 


    [urlRequest setHTTPMethod:@"POST"]; 
    [urlRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
    [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
    NSString *postString = @"sometext=Hello&language=en"; 
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]]; 
    [urlRequest setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; 


NSString *returnString = [[NSString alloc] initWithData:[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil] encoding:NSUTF8StringEncoding]; 
NSLog(@"%@",returnString); 

的NSLog的結果是:

<html> 
    <head> 
    </head> 
    <body> 
     NOT SET 
    </body> 
</html> 

已經感謝

+0

你在哪裏添加您的內容長度和內容類型?服務器檢查這些字段嗎?我可以根據您的回覆添加答案。 – 2011-03-21 13:53:29

+0

看我的編輯。但它仍然不起作用。 – 2011-03-21 14:10:46

+0

你確定你正在使用的編碼風格嗎?也應該不是urlRequest和不請求?你還需要在設置http body之前添加它。你能發佈你實際運行的代碼嗎? – 2011-03-21 14:13:24

回答

4

我碰到了同樣的問題來了一些時間,而解決辦法是把它添加到請求:

[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
0

我建議你可以嘗試ASIHTTPRequest Library,它不僅可以像你的問題很容易處理HTTP請求,只使用ASIFormDataRequest,但也容易異步處理。

+0

該庫的版權如何?它可以自由使用嗎? – 2011-03-21 14:08:42

+0

是的。這是一個BSD許可證 – 2011-03-21 14:12:26

+1

BSD許可,免費使用,非侵入式,因此可用於商業項目而不放棄對源代碼的權利。 – MCannon 2011-03-21 14:37:56

2

問題的一種可能的來源可以是在代碼要指定的值給msgLength變量之前設置的Content-Length頭的事實。由於對零對象返回零OB的OBJ-C的方法(和nil爲0),你的內容Lenght設置爲0,嘗試移動線

NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]]; 

[urlRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];