2009-04-24 20 views
13

Tôi đang gửi một bài đăng bằng NSURLRequest.NSURLRequest - url mã hóa cho NSURLRequest POST Body (Mục tiêu iPhone-C)

NSURL *url = [NSURL URLWithString:someUrlString]; 
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
NSString *msgLength = [NSString stringWithFormat:@"%d", [parameterString length]]; 
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest setHTTPBody: [parameterString dataUsingEncoding:NSUTF8StringEncoding]]; 

Trong cơ thể của yêu cầu tôi mã hóa các NVP sau:

ReturnURL = http://someSite.com

Các bài đang trải qua thành công, nhưng tôi nhận được một lỗi trở lại. Lỗi báo cáo url không hợp lệ.

Vì vậy, tôi đã thay đổi nó để:

ReturnURL = http:% 2F% 2FsomeSite.com

Với những lỗi tương tự.

Tôi cũng đã kiểm tra kỹ nó bằng Trình khách HTTP của Todd Ditchendorf, với cùng kết quả.

Tôi biết tôi phải mã hóa sai, ai đó có thể cho tôi biết tôi đang làm gì sai?

Cảm ơn Corey

** UPDATE: Nhờ có những người đã trả lời. Tôi đã bỏ lỡ một dấu và trong các giá trị NVP của tôi. Vì vậy, tất nhiên, ngay sau khi tôi sửa nó, mọi thứ đều ổn. Những gì tôi nghi ngờ, việc mã hóa url trong phần nội dung của bài đăng không chính xác. Tôi không sử dụng khung ASIHTTPRequest, nhưng nó đã giúp tôi gỡ rối vấn đề (overkill cho những gì tôi cần). **

Trả lời

15

Xem xét sử dụng khuôn khổ ASIHTTPRequest Bến Copsey của để tạo ra và gửi yêu cầu htttp đồng bộ và không đồng bộ (POST và GET):

ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:@"http://someSite.com"] autorelease]; 
[request setPostValue:@"myValue1" forKey:@"myFormField1"]; 
[request setPostValue:@"myValue2" forKey:@"myFormField2"]; 
// etc. 
[request start]; 
NSError *error = [request error]; 
if (!error) 
    NSString *response = [request responseString]; 

khuôn khổ của ông là một tiết kiệm thời gian rất lớn.

+1

ASIHttpRequest thật đáng sợ !! – bentford

4

Tôi không biết nếu điều này giải quyết vấn đề của bạn, nhưng

[parameterString length] 

thường không được tính bằng độ dài của

[parameterString dataUsingEncoding:NSUTF8StringEncoding] 

vì UTF8 mã hóa ký tự với số lượng byte khác nhau.

Các vấn đề liên quan