想了解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 教程)
- AFNetworking2.0 get/post请求、使用自签证书访问HTTPS
- ajax post请求+django后台处理
- android与web交互-post请求
- dart系列(六) post请求
ios – 如何在Swift中创建NSURLSession POST请求(ios swift 教程)
根据我的下面的代码响应不是来自服务器可以有人帮助我
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)") } }
解决方法
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
1,必备系统库CFNetwork.framework、Security.framework、SystemConfiguration.framework、MobileCoreServices.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访问库,由于它是基于iOS的HTTP网络通讯库,自然证书方面的要求和系统是一致的,也就是你需要有一张合法的站点证书。
正式的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,再加上ca的cer格式证书,引入到app的bundle里,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后台处理
选择行: $(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请求
<!-- 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请求
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请求的相关信息,可以在本站进行搜索。
本文标签: