আপনি কীভাবে কোনও বিদ্যমানটিতে ডেটা যুক্ত করবেন POST
NSURLRequest
? আমার একটি নতুন প্যারামিটার যুক্ত করা দরকার userId=2323
।
উত্তর:
আপনি যদি তৃতীয় পক্ষের ক্লাস ব্যবহার করতে না চান তবে নিম্নলিখিতটি আপনি কীভাবে পোস্ট বডি সেট করবেন ...
NSURL *aUrl = [NSURL URLWithString:@"http://www.apple.com/"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
NSString *postString = @"company=Locassa&quality=AWESOME!";
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request
delegate:self];
কেবল আপনার কী / মান জুটি পোস্ট স্ট্রিংয়ে যুক্ত করুন
NSMutableURLRequest
কল করার আগে অবশ্যই সমস্ত পরিবর্তন করতে হবে NSURLConnection
।
উপরের কোডটি অনুলিপি করে আটকানোর সাথে সাথে আমি এই সমস্যাটি দেখতে পাচ্ছি এবং চালনা করে TCPMon
দেখুন এবং অনুরোধটি GET
প্রত্যাশার পরিবর্তে হয়েছে POST
।
NSURL *aUrl = [NSURL URLWithString:@"http://www.apple.com/"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
NSString *postString = @"company=Locassa&quality=AWESOME!";
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request
delegate:self];
POST
অনুরোধ গঠনের বিষয়ে পূর্ববর্তী পোস্টগুলি মূলত সঠিক (শরীরের প্যারামিটারগুলি যুক্ত করুন, URL নয়)। তবে যদি কোনও সংরক্ষিত অক্ষর (উদাহরণস্বরূপ স্পেস, অ্যাম্পারস্যান্ড, প্লাস চিহ্ন) ধারণকারী ইনপুট ডেটার কোনও সম্ভাবনা থাকে তবে আপনি এই সংরক্ষিত অক্ষরগুলি পরিচালনা করতে চাইবেন। যথা, আপনার ইনপুটটি শতাংশে পালাতে হবে।
//create body of the request
NSString *userid = ...
NSString *encodedUserid = [self percentEscapeString:userid];
NSString *postString = [NSString stringWithFormat:@"userid=%@", encodedUserid];
NSData *postBody = [postString dataUsingEncoding:NSUTF8StringEncoding];
//initialize a request from url
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPBody:postBody];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
//initialize a connection from request, any way you want to, e.g.
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
precentEscapeString
পদ্ধতিটি যেখানে নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:
- (NSString *)percentEscapeString:(NSString *)string
{
NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)string,
(CFStringRef)@" ",
(CFStringRef)@":/?@!$&'()*+,;=",
kCFStringEncodingUTF8));
return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"];
}
দ্রষ্টব্য, এখানে একটি প্রতিশ্রুতিবদ্ধ NSString
পদ্ধতি ছিল stringByAddingPercentEscapesUsingEncoding
(এখন অবহেলিত) এটি খুব অনুরূপ কিছু করে তবে এটি ব্যবহার করার প্রলোভনকে প্রতিহত করে। এটি কিছু অক্ষর পরিচালনা করে (উদাহরণস্বরূপ স্পেস ক্যারেক্টার) তবে অন্য কয়েকটি নয় (যেমন: +
বা &
অক্ষরগুলি)।
সমসাময়িক সমতুল্য হ'ল stringByAddingPercentEncodingWithAllowedCharacters
, তবে, আবার ব্যবহার করার প্রলোভিত হবেন না URLQueryAllowedCharacterSet
, কারণ এটি অনস্কেপডকেও অনুমতি দেয় +
এবং &
পাস করে। এই দুটি অক্ষরকে বিস্তৃত "ক্যোয়ারী" এর মধ্যে অনুমতি দেওয়া হয়েছে, তবে যদি এই চরিত্রগুলি কোনও প্রশ্নের মধ্যে কোনও মানের মধ্যে উপস্থিত হয় তবে তাদের অবশ্যই পালাতে হবে। প্রযুক্তিগতভাবে, আপনি হয় URLQueryAllowedCharacterSet
কোনও পরিবর্তনীয় চরিত্র সেট তৈরি করতে এবং সেগুলিতে অন্তর্ভুক্ত কয়েকটি অক্ষর মুছে ফেলতে বা স্ক্র্যাচ থেকে আপনার নিজস্ব চরিত্র সেট তৈরি করতে ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, যদি আপনি Alamofire এর তাকান প্যারামিটার এনকোডিং , তারা নিতে URLQueryAllowedCharacterSet
পরে অপসারণ generalDelimitersToEncode
(যার মধ্যে অক্ষর #
, [
, ]
, এবং @
, কিন্তু কিছু পুরানো ওয়েব সার্ভার একটি ঐতিহাসিক বাগ কারণ, তন্ন তন্ন ?
না /
) এবং subDelimitersToEncode
(অর্থাত !
, $
, &
, '
, (
, )
, *
, +
, ,
, ;
, এবং =
)। এটি সঠিক বাস্তবায়ন (যদিও আপনি অপসারণের বিষয়ে বিতর্ক করতে পারেন ?
এবং /
), যদিও বেশ দোষযুক্ত। সম্ভবত CFURLCreateStringByAddingPercentEscapes
আরও সরাসরি / দক্ষ।
stringByAddingPercentEscapesUsingEncoding:
, তবে stringByAddingPercentEncodingWithAllowedCharacters:
প্রতিটি চরিত্রের সাথে সূক্ষ্মভাবে কাজ করে। উদাহরণ: URLString = [URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
stringByAddingPercentEncodingWithAllowedCharacters
করতে পারবেন তবে আপনি ব্যবহার করতে পারবেন না URLQueryAllowedCharacterSet
, যেমন এতে অন্তর্ভুক্ত রয়েছে +
এবং &
(যেগুলি বিস্তৃত ক্যোয়ারির মধ্যে অনুমোদিত চরিত্রের মধ্যে রয়েছে, তবে যদি এই চরিত্রগুলি কোনও প্রশ্নের মধ্যে কোনও মানের মধ্যে উপস্থিত হয় তবে অবশ্যই তাদের পালাতে হবে, যা চরিত্রের সেটটি করবে না )। সুতরাং, আপনি হয় URLQueryAllowedCharacterSet
একটি পরিবর্তনীয় চরিত্র সেট তৈরি করতে এবং সেগুলিতে অন্তর্ভুক্ত কয়েকটি অক্ষর মুছে ফেলতে বা স্ক্র্যাচ থেকে আপনার নিজস্ব চরিত্র সেট তৈরি করতে ব্যবহার করতে পারেন। বা ব্যবহার CFURLCreateStringByAddingPercentEscapes
।
CFURLCreateStringByAddingPercentEscapes
এখন যেটি অবহেলিত তা দেওয়া হল, আপনার যথাযথ চরিত্রটি নিজেকে সেট করা উচিত। স্ট্যাকওভারফ্লো . com/a/54742187/1271826 দেখুন ।
NSURL *url= [NSURL URLWithString:@"https://www.paypal.com/cgi-bin/webscr"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
NSString *postString = @"userId=2323";
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];
উপরের উদাহরণ কোডটি আমার পক্ষে সত্যিই সহায়ক ছিল, তবে (যেমন উপরে বর্ণিত হয়েছে), আমি মনে করি আপনার NSMutableURLRequest
পরিবর্তে ব্যবহার করা দরকার NSURLRequest
। এটির বর্তমান ফর্মে, আমি setHTTPMethod
কলটির প্রতিক্রিয়া জানাতে পারি না । টাইপ স্থির জিনিসগুলি ঠিক আপ পরিবর্তন করা।
যে কোনও একটি দ্রুত সমাধানের সন্ধান করছে
let url = NSURL(string: "http://www.apple.com/")
let request = NSMutableURLRequest(URL: url!)
request.HTTPBody = "company=Locassa&quality=AWESOME!".dataUsingEncoding(NSUTF8StringEncoding)