2016-03-30 7 views
0

私はSwiftを初めて使用しており、Objective Cを知らない。この機能をSwiftに完全に変換したい。Objective-C POSTリクエストをSwiftに変換する

void post_req() 

    { 
     NSString *oper = @"99"; 
     NSString *key = @"22"; 
NSString *query = @"22"; 
NSString *event_id = @"2"; 
NSError * error = nil; 

NSString *myRequestString = [[NSString alloc] initWithFormat:@"operation=%@&key=%@&payload=%@", oper, key, query, event_id]; 
NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ]; 
NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString:@"numbers"]]; 
[request setHTTPMethod: @"POST"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"]; 
[request setHTTPBody: myRequestData]; 
NSURLResponse *response; 
NSError *err; 
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err]; 
NSString *content = [NSString stringWithUTF8String:[returnData bytes]]; 
NSError *e = nil; 
NSData *jData = [content dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:jData options: NSJSONReadingMutableContainers error: &e]; 

id<NSObject> value = JSON[@"response"]; 

NSLog(@"responseData: %@", JSON); 
NSLog(@"payData: %@", value); 
NSString* responseString = [[NSString alloc] initWithData:returnData encoding:NSNonLossyASCIIStringEncoding]; 

if ([content isEqualToString:responseString]) 
{ 
    NSLog(@"responseData: %@", content); 
} 

これまで私がこれまで行ってきたことです。正常に動作していません。

func post_req() { 

    let oper = "99" 
    let key = "22" 
    let query = "22" 
    let event_id = "10" 
    var error : NSError? 

    let urlString = "http://numbers" 
    let url = NSURL(string: urlString)! 
    let request = NSMutableURLRequest(URL: url) 
    var session = NSURLSession.sharedSession() 
    request.HTTPMethod = "POST" 

    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 

    var myRequestString = NSString(format: "operation=%@&key=%@&payload=%@", oper, key, query, event_id) 
    var myRequestData = NSData(bytes: myRequestString.UTF8String, length: myRequestString.length) 
    //request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type") 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"content-type") 
    request.HTTPBody = myRequestData 

    let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in 

     var content = String(data: data!, encoding: NSUTF8StringEncoding)! 

     var jData = content.dataUsingEncoding(NSUTF8StringEncoding) 

     do { 

      let JSON = try NSJSONSerialization.JSONObjectWithData(jData!, options: .MutableContainers) 


      print("responseData: %@", JSON) 

     } catch { 
      print("error") 
     } 
     print("responseData: %@", content) 

    }) 
    task.resume() 
} 

私は問題はエンコーディングで、リクエストの終了時で発生していると思いますが、私はちょうどすべての詳細を含めるようにしたかったです。

答えて

2

なぜAlamofireを使用しないでください。デフォルトでjSonを処理します。私たちはそれを気にする必要はありません。ライブラリをプロジェクトに統合するだけです。指示に従う:github.com/Alamofire/Alamofire

"import Alamofire"を使用して、ライブラリをクラスにインポートします。次のコードを使用してください:

let parameters = ["oper": "99" ,"key" : "22" , "query" : "22" , "event_id" : "2" , "error" : "" ] 

Alamofire.request(.POST, "http://yoururl.com", parameters: parameters) 
.responseString { response in 
    print("Response String: \(response.result.value)") 
} 
.responseJSON { response in 
    print("Response JSON: \(response.result.value)") 
    //Handle the json response here 
    if let parseJSON = response.result.value { 

     } 
} 
+0

ありがとうございますが、これは動作しません。私の要求と同じエラーが返されます。これはレスポンスです:{ステータスコード:500、ヘッダ{ "Content-Type" = "text/html"; 日付= "Wed、2020年3月30日20:18:10 GMT"; サーバー= localhost; "Transfer-Encoding" =アイデンティティ。 }}) – fishinthesea

関連する問題