发送http请求的方法
在http/1.1 协议中,定义了8种发送http请求的方法
get post options head put delete trace connect patch.
根据http协议的设计初衷,不同的方法对资源有不同的操作方式,
put :增
delete:删
post:改
get:查
最常用的的是get 和 post (实际上get 和 post 都能办到增删改查)
要想使哟过get 和 post 就必须了解一些概念,
1.参数:比如账号和密码的传递。
get 和 post 区别:
get 的本质就是“得”,post的本质就是“给”。
开发中使用最多的是get,但是如果涉及到用户的隐私数据传递,那么一定要使用post。这样可以保护用户的隐私信息。
get 是可以缓存的,post 是没有缓存的。
get的参数都在url里边,post的参数都是被包装过的。
get :
从服务器拿数据效率高。
从数学的角度讲,get的结果是“幂等”。
get请求能够被缓存(由于能幂等,所以就可以缓存)
在http协议定义中,没有对get请求的数据大小限制,不过因为浏览器不同,一般限制在2k ~8k 之间。
所有的参数包装在url中,并且服务器的访问日志会记录,不要传递敏感信息。
参数格式:?在资源路径末尾添加?表示追加参数。
变量名=变量值,每个变量及值安照“变量名 = 变量值”方式设定,不能包含空格或者中文
& 多个参数适用&连接
//
// ViewController.m
// 01-login(登陆)
//
// Created by jerry on 15/10/8.
// Copyright (c) 2015年 jerry. All rights reserved.
// #import "ViewController.h" @interface ViewController ()
@end @implementation ViewController - (void)viewDidLoad {
/**
* GET
http://127.0.0.1/login.php?username=%@&password=%@
1.http://127.0.0.1 是主机地址
2.login.php是服务器负责登陆的脚本(php,java,.net)
3.?后面是参数,是给服务器传递参数的
参数的格式
变量名 = 值
username = @"zhangsan"
4.& 如果是多个参数,用&进行连接。
*/ NSString *userName = @"zhangsan";
NSString *userPwd = @"zhang";
// 地址
NSString *add = [NSString stringWithFormat:@"http://127.0.0.1/login.php?username=%@&password=%@",userName,userPwd];
// url 里面是不可以包含中文、空格、特殊符号等,如果有的话需要进行转译(%号的转译) username = @"张三"
// http://127.0.0.1/login.php?username=%E5%BC%A0%E4%B8%89&password=zhang
add = [add stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:add];
// 请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy: timeoutInterval:2.0F];
// 连接
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 反序列化
id result = [NSJSONSerialization JSONObjectWithData:data options: error:NULL];
NSLog(@"%@",result);
}];
} @end
post:
/**
* post
*/
- (void)postLogin{ /**
* POST
只是一个单纯的资源路径,是没有任何参数的,因为参数都在数据体里边。 request
get的时候---什么都不需要做,因为系统默认的http方法(HTTPMethod)就是一个get
post的时候---
1.需要指定HTTPMethod 是POST
2.指定了数据体的二进制。
POST出现中文是不需要转译的,因为系统帮助实现了。
****POST的参数和GET在URL里的参数格式是一样的,只是没有了 ? &
Connection 都是一样的
*/
NSString *userName = @"zhangsan";
NSString *userPwd = @"zhang";
// 1.地址
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login.php"]; // 请求 post的数据体包含在这个里边
// 2.可变的请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy: timeoutInterval:2.0F];
// 2.1 制定的http的访问方法,服务器端才知道是以何种方式访问的
request.HTTPMethod = @"POST";
// 2.2 数据体的内容,
NSString *bobyStr = [NSString stringWithFormat:@"username=%@&password=%@",userName,userPwd]; // 跟服务器的交互全部传输的是二进制
request.HTTPBody = [bobyStr dataUsingEncoding:NSUTF8StringEncoding];
// 3.连接
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
// 反序列化
id result = [NSJSONSerialization JSONObjectWithData:data options: error:NULL];
NSLog(@"%@",result);
}]; }
发送http请求的方法的更多相关文章
- 【JAVA】通过HttpClient发送HTTP请求的方法
HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...
- 【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)
Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...
- 后台发送http请求通用方法,包括get和post
package com.examsafety.service.sh; import java.io.BufferedReader; import java.io.IOException; import ...
- 向指定URL 发送POST请求的方法
java发送psot请求: package com.tea.web.admin; import java.io.BufferedReader; import java.io.IOException; ...
- java中发送http请求的方法
package org.jeecgframework.test.demo; import java.io.BufferedReader; import java.io.FileOutputStream ...
- 通过java.net.URLConnection发送HTTP请求的方法
一.前言 如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求. Java有原生的API可用于发送HTTP请求,即java.net.URL.java.net.UR ...
- 发送http请求get方法
//获取网页html NSURL* url = [NSURL URLWithString:@"http://www.baidu.com"]; NSMutableURLRequest ...
- js中使用队列发送ajax请求
最近,项目中需要按照先后顺序发送ajax请求,并且在一次请求结束后才能发起下一次,不然就会导致逻辑错误. 解决办法是定义一个数组,保存ajax请求数据. 以下使用extjs4定义一个类 Ext.def ...
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
syncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主 ...
随机推荐
- BZOJ2017[USACO 2009 Nov Silver 1.A Coin Game]——DP+博弈论
题目描述 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起的第I枚硬币的 ...
- BZOJ2173 整数的lqp拆分(生成函数)
首先有序整数拆分有个显然的递推式是g(n)=Σg(i) (i=0~n-1),即枚举加入最后一个数之前和是多少.(虽然不用递推式也能显然地知道答案是2n-1). 类似地,lqp拆分有递推式f(n)=Σf ...
- LOJ2540 [PKUWC2018] 随机算法 【状压DP】
题目分析: 听说这题考场上能被$ O(4^n) $的暴力水过,难不成出题人是毕姥爷? 首先思考一个显而易见的$ O(n^2*2^n) $的暴力DP.一般的DP都是考虑最近的加入了哪个点,然后删除后递归 ...
- Matplotlib python 基本用法
1.简单的绘制函数 import matplotlib.pyplot as plt import numpy as np x = np.linspace(-1, 1, 50) y1 = x + 1 p ...
- 自学Linux Shell12.2-test命令
点击返回 自学Linux命令行与Shell脚本之路 12.2-test命令 if-then语句不能测试命令退出状态码之外的条件,test命令提供了在if-then语句中测试不同条件的途径. 如果tes ...
- 【uoj207】 共价大爷游长沙
http://uoj.ac/problem/207 (题目链接) 题意 给出一棵无根树,4种操作:在路径集合中加入一条路径,在路径集合中删除一条路径,删一条边加一条边,查询一条边是否被集合中所有路径经 ...
- intent.setFlags方法中的参数值含义
一. intent.setFlags()方法中的参数值含义: 1.FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:A B C D .D此时通过intent跳转到B,如果这个int ...
- Ubuntu16.04创建electronic-wechat启动器图标
步骤 将最新的electronic-wechat二进制包,下载解压,并移动到/opt/下面.sudo cp -r electronic-wechat/ /opt/electronic-wechat/ ...
- 【codevs1048】石子归并(初级版)
采用动态规划的原因:合并有一定次序,即:只能相邻石子进行合并. 阶段:当前合并了的区间长度 状态:区间的左右端点 状态转移方程:\(dp[l][r]=min\{dp[l][r],dp[l][k]+dp ...
- Sublime Text3—系统设置
摘要 软件的设置分为系统设置和快捷键设置两项,这次分享系统设置,Sublime Text3-自带快捷键介绍前面已分享过. 正文 菜单依次选择Preferences | Settings,我们修改设置不 ...