GVKun编程网logo

ios – 如何在Swift中创建NSURLSession POST请求(ios swift 教程)

1

想了解ios–如何在Swift中创建NSURLSessionPOST请求的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于iosswift教程的相关问题,此外,我们还将为您介绍关于AFNetw

想了解ios – 如何在Swift中创建NSURLSession POST请求的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于ios swift 教程的相关问题,此外,我们还将为您介绍关于AFNetworking2.0 get/post请求、使用自签证书访问HTTPS、ajax post请求+django后台处理、android与web交互-post请求、dart系列(六) post请求的新知识。

本文目录一览:

ios – 如何在Swift中创建NSURLSession POST请求(ios swift 教程)

ios – 如何在Swift中创建NSURLSession POST请求(ios swift 教程)

嗨,我是 Swift的初学者,我正在努力使NSURLSession“发布”请求发送一些参数,如下面的代码

根据我的下面的代码响应不是来自服务器可以有人帮助我

BackGroundClass: –

import UIKit

protocol sampleProtocal{

    func getResponse(result:NSDictionary)
    func getErrorResponse(error:Nsstring)
}

class BackGroundClass: NSObject {

    var delegate:sampleProtocal?

    func callPostService(url:String,parameters:NSDictionary){


        print("url is===>\(url)")

        let request = NSMutableuRLRequest(URL: NSURL(string:url)!)

        let session = NSURLSession.sharedSession()
        request.HTTPMethod = "POST"

        //Note : Add the corresponding "Content-Type" and "Accept" header. In this example I had used the application/json.
        request.addValue("application/json",forHTTPHeaderField: "Content-Type")
        request.addValue("application/json",forHTTPHeaderField: "Accept")

        request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters,options: [])

        let task = session.dataTaskWithRequest(request) { data,response,error in
            guard data != nil else {
                print("no data found: \(error)")
                return
            }

            do {
                if let json = try NSJSONSerialization.JSONObjectWithData(data!,options: []) as? NSDictionary {
                    print("Response: \(json)")
                    self.mainResponse(json)
                } else {
                    let jsonStr = Nsstring(data: data!,encoding: NSUTF8StringEncoding)// No error thrown,but not NSDictionary
                    print("Error Could not parse JSON: \(jsonStr)")
                    self.eroorResponse(jsonStr!)
                }
            } catch let parseError {
                print(parseError)// Log the error thrown by `JSONObjectWithData`
                let jsonStr = Nsstring(data: data!,encoding: NSUTF8StringEncoding)
                print("Error Could not parse JSON: '\(jsonStr)'")
                self.eroorResponse(jsonStr!)
            }
        }

        task.resume()
    }

    func mainResponse(result:NSDictionary){
        delegate?.getResponse(result)
    }

    func eroorResponse(result:Nsstring){
        delegate?.getErrorResponse(result)
    }
}

视图控制器: –

import UIKit

class ViewController: UIViewController,sampleProtocal {

    override func viewDidLoad() {
        super.viewDidLoad()

        let delegate = BackGroundClass();
        delegate.self;

        let params = ["scancode":"KK03799-008","UserName":"admin"] as Dictionary<String,String>

        let backGround=BackGroundClass();
        backGround.callPostService("url",parameters: params)
    }

    func getResponse(result: NSDictionary) {
        print("Final response is\(result)");
    }

    func getErrorResponse(error: Nsstring) {
        print("Final Eroor code is\(error)")
    }
}

解决方法

Swift 4.0发布示例 –
func postAction(_ sender: Any) {
        let Url = String(format: "your url")
        guard let serviceUrl = URL(string: Url) else { return }
        let parameterDictionary = ["username" : "Test","password" : "123456"]
        var request = URLRequest(url: serviceUrl)
        request.httpMethod = "POST"
        request.setValue("Application/json",forHTTPHeaderField: "Content-Type")
        guard let httpBody = try? JSONSerialization.data(withJSONObject: parameterDictionary,options: []) else {
            return
        }
        request.httpBody = httpBody

        let session = URLSession.shared
        session.dataTask(with: request) { (data,error) in
            if let response = response {
                print(response)
            }
            if let data = data {
                do {
                    let json = try JSONSerialization.jsonObject(with: data,options: [])
                    print(json)
                }catch {
                    print(error)
                }
            }
            }.resume()
    }

AFNetworking2.0 get/post请求、使用自签证书访问HTTPS

AFNetworking2.0 get/post请求、使用自签证书访问HTTPS

1,必备系统库CFNetwork.frameworkSecurity.frameworkSystemConfiguration.frameworkMobileCoreServices.framework

2,导入AFNetworking 当然 UIKit+AFNetworking这个还是挺有用的  用不用随便

3,#import "AFNetworking.h"

4, manager.responseSerializer.acceptableContentTypes = nil;//不是提交json  xml什么的时候一定要加上 否则erro不解释 另外//http://blog.csdn.net/marujunyy/article/details/18424711 可以详细学习一下

- (void)getAFNetWorking{

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.responseSerializer.acceptableContentTypes = nil;

    NSString *urlpath = @"http://www.innouni.com/zwjk_app_server/?c=app&a=login&userName=15068821319&password=123456";

    [manager GET:urlpath parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSLog(@"JSON: %@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"Error: %@", error);

    }];

}


- (void)postAFNetWorking{

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.responseSerializer.acceptableContentTypes = nil;

    NSString *urlpath = @"http://www.innouni.com/zwjk_app_server/?c=app&a=login";

    NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"15068821319",@"userName",@"123456",@"password", nil];

    [manager POST:urlpath parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {

        NSLog(@"JSON: %@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"Error: %@", error);

    }];

}


    /*绝大部分iOS程序的后台服务都是基于RESTful或者WebService的,不论在任何时候,你都应该将服务置于HTTPS上,因为它可以避免中间人攻击的问题,还自带了基于非对称密钥的加密通道!现实是这些年涌现了大量速成的移动端开发人员,这些人往往基础很差,完全不了解加解密为何物,使用HTTPS后,可以省去教育他们各种加解密技术,生活轻松多了。

     

       使用HTTPS有个问题,就是CA证书。缺省情况下,iOS要求连接的HTTPS站点必须为CA签名过的合法证书,AFNetworking是个iOS上常用的HTTP访问库,由于它是基于iOSHTTP网络通讯库,自然证书方面的要求和系统是一致的,也就是你需要有一张合法的站点证书。

     

       正式的CA证书非常昂贵,很多人都知道,AFNetworking2只要通过下面的代码,你就可以使用自签证书来访问HTTPS*/

    

    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];

    securityPolicy.allowInvalidCertificates = YES;

     /* 这么做有个问题,就是你无法验证证书是否是你的服务器后端的证书,给中间人攻击,即通过重定向路由来分析伪造你的服务器端打开了大门。

      

        解决方法。AFNetworking2是允许内嵌证书的,通过内嵌证书,AFNetworking2就通过比对服务器端证书、内嵌的证书、站点域名是否一致来验证连接的服务器是否正确。由于CA证书验证是通过站点域名进行验证的,如果你的服务器后端有绑定的域名,这是最方便的。将你的服务器端证书,如果是pem格式的,用下面的命令转成cer格式

      openssl x509 -in <你的服务器证书>.pem -outform der -out server.cer

      然后将生成的server.cer文件,如果有自建ca,再加上cacer格式证书,引入到appbundle里,AFNetworking2*/

    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy AFSSLPinningModeCertificate];

    //或者

    //AFSecurityPolicy *securityPolicy = [AFSecurityPolicy AFSSLPinningModePublicKey];

    securityPolicy.allowInvalidCertificates = YES; //还是必须设成YES ,会自动扫描bundle.cer的文件,并引入,这样就可以通过自签证书来验证服务器唯一性了。

    

    

    

      //我前面说过,验证站点证书,是通过域名的,如果服务器端站点没有绑定域名(万恶的备案),仅靠IP地址上面的方法是绝对不行的。怎么办?答案是想通过设置是不可以的,你只能修改AFNetworking2的源代码!打开AFSecurityPolicy.m文件,找到方法:

    

    

    - (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust

forDomain:(NSString *)domain{

    //            SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates);

    //

    //            if (!AFServerTrustIsValid(serverTrust)) {

    //                return NO;

    //            }

    //

    //            if (!self.validatesCertificateChain) {

    //                return YES;

    //            }

    //这样,AFSecurityPolicy就只会比对服务器证书和内嵌证书是否一致,不会再验证证书是否和站点域名一致了。

}


ajax post请求+django后台处理

ajax post请求+django后台处理

选择行:
$(document).ready(function() {
    var table = $(''#table_id_example'').DataTable();
    //定义一个表格示例变量
    $(''#table_id_example tbody'').on( ''click'', ''tr'', function () {
      //选中表格,tbody标签。在每一行上的tr行上绑定一个点击事件click.
        if ( $(this).hasClass(''selected'') ) {
          //如果鼠标点击这个行,那么在这个tr标签中搜索selected属性,如果tr行有selected属性那么。
            $(this).removeClass(''selected'');
            //如果这个行有selected属性,那么将此属性删除。
        }
        else {
            table.$(''tr.selected'').removeClass(''selected'');
            //如果被选中的行本身没有selected属性。那么删除整个表格中带有selected属性的行,将selected属性删除。
            $(this).addClass(''selected'');
            //然后给当前鼠标点击的行tr标签天津一个标签属性selected。
        }
    } );

//删除行

$(''#del'').click(function () {
      if (table.rows(''.selected'').data().length) {
        //查找这个表格的行中具有selected属性的行。获取改行的数据的length长度。如果不为0.那么
        $("#modaldel").modal()
        //只需对id=modaldel的模态框执行显示操作。
      } else {
        alert(''请选择项目'');//如果他没有数据说明没有选中提示没有选中
      }
    });

  $(''#delete'').click(function () {
    //上面ok后给这个模态框中的确认按钮属性id=delete的添加一个动作。
    //table.row(''.selected'').remove().draw(false); 
    //多这个表格带有selected属性的行进行删除。并且draw刷新表格。

      //通过ajax将其传值实现删除
        var data ={username:''wangyunlong'',Ip:''8.8.8.8''};
        $.ajax({
                          url : "/deltable/", 
                          //data : {''students'':JSON.stringify(list)},
                          data : JSON.stringify(data),
                          type:"post",
                          contentType:''application/json'',//传到后台的数据必须是json格式
                          dataType : "json", //后台返回的数据必须是json格式
                          success : function(data) {  
                            console.log(''ajax删除数据请求:'',data.status);
                            },
                          error : function(data) {  
                            console.log(''ajax删除数据请求:Error'');
                          },
                   }); 

  
})

url 配置:    path(''deltable/'',views.deltable,name=''deltable''),

def deltable(request):
    import json
    content={
    ''status'':''Success'',
    ''mesg'':''服务器返回的数据'',
    }
    if request.method ==''POST'':
        data=request.body #数据在body里面
        json_data=json.loads(data) #解析json格式的数据
        print("所有数据:",json_data)
        username=json_data.get("username")#获取key为username的值
        Ip = json_data.get("Ip") #获取key为ip的值
        print(''前端POST请求到达上传值为:%s,%s''%(username,Ip));
    return HttpResponse(json.dumps(content)) #将返回的字典转换为json格式

android与web交互-post请求

android与web交互-post请求

<!-- lang: java -->
package org.lxh.demo;    
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MyWebDemo extends Activity {
	private TextView info = null;
	private static final String URL = "http://114.249.165.249/mldn/android.jsp"; // 请求地址

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.main);
		this.info = (TextView) super.findViewById(R.id.info);
		boolean flag = false; // 成功与否的标记
		try {
			HttpPost request = new HttpPost(URL);
			List<NameValuePair> params = new ArrayList<NameValuePair>();
			params.add(new BasicNameValuePair("id", "lixinghua"));
			params.add(new BasicNameValuePair("password", "mldn"));
			request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
			HttpResponse response = new DefaultHttpClient().execute(request);
			if(response.getStatusLine().getStatusCode() != 404) {	// 现在已经发现了数据了
				flag = Boolean.parseBoolean(EntityUtils.toString(
						response.getEntity()).trim());
			}
		} catch (Exception e) {
			info.setText("WEB服务器连接失败!");
		}
		if (flag) {
			info.setText("用户登录成功!");
		} else {
			info.setText("用户登录失败!");
		}
	}
}

dart系列(六) post请求

dart系列(六) post请求

import ''dart:html'';

void main() {
       var data = { ''firstName'' : ''John'', ''lastName'' : ''CarMark'' };

        HttpRequest.postFormData(''http://localhost:3000/pt'', data).then((HttpRequest resp) {
          // Do something with the response.
          querySelector(''#post_cb'').text = "从服务器返回的:" + resp.responseText;
       });
}


index.html

<!DOCTYPE html>
 
<html>
<head>
    <meta charset="utf-8"> 
    <title>posttest</title> 
    <script async src="main.dart" type="application/dart"></script> 
</head>

<body>

  <div id="post_cb"></div>

</body>
</html>


结果:(注意 跨域问题

我们今天的关于ios – 如何在Swift中创建NSURLSession POST请求ios swift 教程的分享就到这里,谢谢您的阅读,如果想了解更多关于AFNetworking2.0 get/post请求、使用自签证书访问HTTPS、ajax post请求+django后台处理、android与web交互-post请求、dart系列(六) post请求的相关信息,可以在本站进行搜索。

本文标签: