HttpURLConnection get和post提交实例
JAVA中用URLCONNECTION 类POST方式提交表单
params = params.deleteCharAt(params.length() - 1); }
URL url = new URL(reqUrl); url_con = (HttpURLConnection) url.openConnection(); url_con.setRequestMethod("GET"); System.setProperty(".client.defaultConnectTimeout", String
temp.append(tempLine); temp.append(crlf); tempLine = rd.readLine(); } responseContent = temp.toString(); rd.close(); in.close(); } catch (IOException e) { logger.error("网络故障", e); } finally { if (url_con != null) { url_con.disconnect(); } }
String string = paramArray[i]; int index = string.indexOf("="); if (index > 0) {
String parameter = string.substring(0, index); String value = string.substring(index + 1, string
import org.apache.log4j.Logger;
/** * <pre> * HTTP 请求代理类 * </pre> * * @author benl * @version 1.0, 2007-7-3 */ public class HttpRequestProxy {
Android 中 HttpURLConnection 使用详解
服务器->客户端
服务器接收到客户端发来的请求后,会进行相应的处理,并向客户端输出信息,输出的信息包括响应头和响应体。
响应头 (Response Headers)
响应头也是一些键值对,如下所示:
响应头包含了服务器想要告诉客户端的一些元数据信息 ,注意不是数据,是元数据,比如通过响应头Content-Encoding告 诉客户端服务器所采用的压缩格式,响应头Content-Type告诉客户端响应体是什么格式的数据,再比如服务端可以通过多个 Set-Cookie响应头向客户端写入多条Cookie信息,等等。刚刚提到的几个请求头都是W3C规定的标准的请求头名称,我们也可
息如下所示:
请求URL(Request URL) 上图中的Request URL就是请求的Url地址,即https://,该Url没有附加其他的参数。其实可以通过?和&符向 URL地址后面追加一系列的键值对参数,比如地址https:///s?ie=utf-8&wd=Android,该Url包含两个键值 对,ie=utf-8,以及wd=Android,ie和wd是key,utf-8和Android分别是其对应的value,服务端可以获取ie和wd所对应的value的 值。由此我们可以看出,Url可以携带额外的数据信息。一般情况下,URL的长度不能超过2048个字符,即2KB,超过此限制
GET请求可以被缓存。 我们之前提到,当发送键值对信息时,可以在URL上面直接追加键值对参数。当用GET请求发送键值对时,键值对会随着URL一起
发送的。
由于GET请求发送的键值对时随着URL一起发送的,所以一旦该URL被黑客截获,那么就能看到发送的键值对信息,所以GET请求 的安全性很低,不能用GET请求发送敏感的信息(比如用户名密码)。 由于URL不能超过2048个字符,所以GET请求发送数据是有长度限制的。 由于GET请求较低的安全性,我们不应该用GET请求去执行增加、删除、修改等的操作,应该只用它获取数据。 POST: POST请求从不会被缓存。 POST请求的URL中追加键值对参数,不过这些键值对参数不是随着URL发送的,而是被放入到请求体中发送的,这样安全性稍微好
HTTP请求(GET与POST区别)和响应(get是从服务器上获取数据,post是向服务器。。。
HTTP请求(GET与POST区别)和响应(get是从服务器上获取数据,post是向服务器。
HTTP有两部分组成:请求与响应,下⾯分别整理。
⼀.HTTP请求1.HTTP请求格式:<request line><headers><blank line>[<request-body>]在HTTP请求中,第⼀⾏必须是⼀个请求⾏(request line),⽤来说明请求类型、要访问的资源以及使⽤的HTTP版本。
紧接着是⼀个⾸部(header)⼩节,⽤来说明服务器要使⽤的附加信息。
在⾸部之后是⼀个空⾏,再此之后可以添加任意的其他数据[称之为主体(body)]。
2.GET与POST区别HTTP 定义了与服务器交互的不同⽅法,最基本的⽅法是 GET 和 POST(Ajax开发,关⼼的只有GET请求和POST请求)。
GET与POST⽅法有以下区别:(1)在客户端,Get⽅式在通过URL提交数据,数据在URL中可以看到;POST⽅式,数据放置在HTML HEADER内提交。
(2) GET⽅式提交的数据最多只能有1024字节,⽽POST则没有此限制。
(3)安全性问题。
正如在(1)中提到,使⽤ Get 的时候,参数会显⽰在地址栏上,⽽ Post 不会。
所以,如果这些数据是中⽂数据⽽且是⾮敏感数据,那么使⽤ get;如果⽤户输⼊的数据不是中⽂字符⽽且包含敏感数据,那么还是使⽤ post为好。
(4)安全的和幂等的。
所谓安全的意味着该操作⽤于获取信息⽽⾮修改信息。
幂等的意味着对同⼀ URL 的多个请求应该返回同样的结果。
完整的定义并不像看起来那样严格。
换句话说,GET 请求⼀般不应产⽣副作⽤。
从根本上讲,其⽬标是当⽤户打开⼀个链接时,她可以确信从⾃⾝的⾓度来看没有改变资源。
⽐如,新闻站点的头版不断更新。
虽然第⼆次请求会返回不同的⼀批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。
JavaHttpURLConnection发送post请求示例
JavaHttpURLConnection发送post请求⽰例public static Map<String, Object> invokeCapp(String urlStr, Map<String, Object> params) throws Exception {Map map = new HashMap();// post参数StringBuilder postData = new StringBuilder();for (Map.Entry<String,Object> param : params.entrySet()) {if (postData.length() != 0) {postData.append('&');}postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));postData.append('=');postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));}(postData.toString());byte[] postDataBytes = postData.toString().getBytes("UTF-8");//开始访问HttpURLConnection conn = (HttpURLConnection)(new URL(urlStr)).openConnection();conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));conn.setConnectTimeout(2000);conn.setReadTimeout(5000);conn.setDoOutput(true);conn.getOutputStream().write(postDataBytes);Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));StringBuilder sb = new StringBuilder();for (int c; (c = in.read()) >= 0;) {sb.append((char)c);}in.close();conn.disconnect();String responseStr = sb.toString();("RequestUtils - responseStr <== " + responseStr);if (StringHelper.isEmpty(responseStr)) {responseStr = "{}";}int statusCode = conn.getResponseCode();("RequestUtils - statusCode <== " + statusCode);if (HttpServletResponse.SC_OK == statusCode) {JSONObject dataJson = (JSONObject) JSONObject.parse(responseStr);map = new HashMap(dataJson);}return map;}。
Java利用HttpURLConnection发送post请求上传文件
Java利用HttpURLConnection发送post请求上传文件文章分类:Java编程在页面里实现上传文件不是什么难事,写个form,加上enctype ="multipart/form-data",在写个接收的就能够够了,没什么难的,若是要用.HttpURLConnection来实现文件上传,还真有点弄头.:-)1.先写个servlet把接收到的 HTTP 信息保留在一个文件中,看一下 form 表单到底封装了什么样的信息。
Java代码public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取输入流,是HTTP协议中的实体内容ServletInputStream in=request.getInputStream();//缓冲区byte buffer[]=new byte[1024];FileOutputStream out=new FileOutputStream("d:\\test.log");int len=sis.read(buffer, 0, 1024);while( len!=-1 ){out.write(buffer, 0, len);len=in.readLine(buffer, 0, 1024);}out.close();in.close();}来一个form表单。
<form name="upform" action="upload.do" method="POST" enctype="multipart/form-data">参数<input type="text" name="username"/><br/>文件1<input type="file" name="file1"/><br/>文件2<input type="file" name="file2"/><br/><input type="submit" value="Submit" /><br /></form>Java代码-----------------------------7da2e536604c8Content-Disposition: form-data; name="username"hello word-----------------------------7da2e536604c8Content-Disposition: form-data; name="file1";filename="D:\haha.txt"Content-Type: text/plainhahahahaha-----------------------------7da2e536604c8Content-Disposition: form-data; name="file2";filename="D:\huhu.txt"Content-Type: text/plainmessihuhu-----------------------------7da2e536604c8--研究下规律发觉有如下几点特点1.第一行是“ -----------------------------7d92221b604bc ”作为分隔符,然后是“ \r\n ” 回车换行符。
get请求和post请求的用法
get请求和post请求的用法
GET请求和POST请求都是HTTP协议的请求方式,用于向服务器请求数据。
它们的区别在于:
1. GET请求通过URL传递请求参数,而POST请求通过请求体传递请求参数。
2. GET请求的请求参数会显示在URL中,而POST请求的请求参数不会显示在URL中。
3. GET请求适合用于请求数据,而POST请求适合用于提交数据。
4. GET请求的请求参数长度有限制,一般为2048个字符,而POST请求的请求参数长度没有限制。
GET请求的用法:
1. 用于请求资源
2. 请求参数通过URL传递,可以通过URL参数直接获取参数
3. 没有上传文件等二进制数据的需求
4. 不需要向服务器发送敏感数据
POST请求的用法:
1. 用于向服务器提交数据
2. 请求参数通过请求体传递,需要通过请求体解析参数
3. 可以上传二进制数据,如文件、图片等
4. 需要向服务器发送敏感数据,如用户名密码等
综上所述,GET请求和POST请求的用法需要根据实际情况进行选择。
一般来说,GET请求适合用于请求数据,而POST请求适合用于提交数据。
同时,需要注意请求参数的传递方式及数据安全性。
Java-HttpURLConnection详细说明与实例
Java-HttpURLConnection详细说明与实例URLConnection 类是⼀个抽象类,代表应⽤程序和URL之间的通信连接,此类的实例可⽤于读取和写⼊此URL引⽤的资源。
URLConnection 允许使⽤GET,POST或者其他HTTP⽅法请求⽅式将请求数据发送到服务器。
使⽤URLConnection对象⼀般分为以下7步。
1:创建⼀个URL对象;2:通过URL对象的openConnection⽅法创建URLConnection对象;3:通过URLConnection对象提供的⽅法可以设置参数和⼀般请求属性。
常⽤的请求属性设置⽅式有以下⼏种:~public void setRequestProperty(String key,String value)设置指定的请求关键字对应的值~public void setDoInput(boolean doinput)设置是否使⽤URL连接进⾏输⼊,默认值为true~public void setDoOutput(boolean dooutput)设置是否使⽤URL连接进⾏输出,默认值为false,如果设置为true,就可以获取⼀个字节输出流,⽤于将数据发送到服务器~public void setUseCaches(boolean usecaches)设置此连接是否使⽤任何可⽤的缓存,默认值为true4:调⽤URLConnection对象的connect⽅法连接到该远程资源5:连接到服务器后,就可以查询头部信息了,查询头部信息常⽤⽅法有以下⼏种:~public String getHeaderField(String name)返回指定头字段的值~public Map<String,List<String>>getHeaderFields()返回头字段的不可修改的Map~public String getContentType()返回content-type头字段的值~public String getContentEncoding()返回content-encoding的值6:获取输⼊流访问资源数据。
http发送get和post请求
java发送GET,POST请求public class HttpUtil {/*** 向指定URL发送GET方法的请求* @param url 发送请求的URL* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果*/public static String sendGet(String url, String param) {String result = "";BufferedReader in = null;try{String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);URLConnection connection = realUrl.openConnection();//设置头信息准备发送请求connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.1;SV1)");connection.connect();in = new BufferedReader(newInputStreamReader(connection.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}}catch(Exception e){System.out.println("发送GET请求出现异常!" + e);e.printStackTrace();}finally{try{if(in != null){in.close();}}catch(Exception e2){e2.printStackTrace();}}return result;}/*** 向指定 URL 发送POST方法的请求* @param url发送请求的 URL* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
HttpURLConnection用法详解
HttpURLConnection⽤法详解参考:1. GET请求与POST请求HTTP协议是现在Internet上使⽤得最多、最重要的协议了,越来越多的Java应⽤程序需要直接通过HTTP协议来访问⽹络资源。
在介绍HttpURLConnection前,我们还是再来说⼀下URL请求最常⽤的两种⽅式:GET请求与POST请求。
GET请求发送的参数如果数据是英⽂字母或数字,则按原样发送,如果是空格,则转换为+,如果是中⽂或其他字符,则直接把字符串⽤BASE64加密,得出如%E4%BD%A0%E5%A5%BD这类似的字符串,其中%XX中的XX为该符号以16进制表⽰的ASCII。
POST请求的参数不是放在URL字符串⾥⾯,⽽是放在HTTP请求的正⽂内,请求的参数被封装起来以流的形式发送给服务端。
对于GET⽅式提交数据的⼤⼩,HTTP协议并没有硬性限制,但某些浏览器及服务器会对它进⾏限制,如IE对URL长度的限制是2083字节(2K+35)。
理论上POST也没有限制,可传较⼤量的数据。
POST的安全性要⽐GET的安全性⾼。
⽐如:通过GET提交数据,⽤户名和密码将明⽂出现在URL上,因为登录页⾯有可能被浏览器缓存,如果其他⼈查看浏览器的历史纪录,那么别⼈就可以拿到你的账号和密码了,除此之外,使⽤GET提交数据还可能会造成Cross-site request forgery(CSRF,跨站请求伪造)攻击。
⼀般来说,Get是向服务器索取数据的⼀种请求,⽽Post是向服务器提交数据的⼀种请求。
2. HttpURLConnection简介在JDK的包中已经提供了访问HTTP协议的基本功能的类:HttpURLConnection。
HttpURLConnection是Java的标准类,它继承⾃URLConnection,可⽤于向指定⽹站发送GET请求、POST请求。
它在URLConnection的基础上提供了如下便捷的⽅法:int getResponseCode(); // 获取服务器的响应代码。
JAVAHttpURLConnection发送post请求,数据格式为form-data,。。。
JAVAHttpURLConnection发送post请求,数据格式为form-data,。
public static String postFormData(String url, Map<String, Object> map) throws Exception {BufferedReader in = null;URL urls = new URL(url);HttpURLConnection connection = null;OutputStream outputStream = null;String rs = "";try {connection = (HttpURLConnection) urls.openConnection();connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=----footfoodapplicationrequestnetwork");connection.setDoOutput(true);connection.setDoInput(true);connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8");connection.setRequestProperty("Accept", "*/*");connection.setRequestProperty("Range", "bytes=" + "");connection.setConnectTimeout(8000);connection.setReadTimeout(20000);connection.setRequestMethod("POST");StringBuffer buffer = new StringBuffer();outputStream = connection.getOutputStream();Set<Entry<String, Object>> entries = map.entrySet();for (Entry<String, Object> entry : entries) {// 每次都清空buffer,避免写⼊上次的数据buffer.delete(0, buffer.length());buffer.append("------footfoodapplicationrequestnetwork\r\n");Object value = entry.getValue();if (!(value instanceof File)) {buffer.append("Content-Disposition: form-data; name=\"");buffer.append(entry.getKey());buffer.append("\"\r\n\r\n");buffer.append(entry.getValue());buffer.append("\r\n");outputStream.write(buffer.toString().getBytes());// System.out.println(buffer.toString());} else {buffer.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"; filename=\"" + ((File) entry.getValue()).getName() + "\"\r\n"); buffer.append("Content-Type: " + "zip" + "\r\n\r\n");// System.out.println(buffer.toString());outputStream.write(buffer.toString().getBytes());File file = (File) entry.getValue();DataInputStream ins = new DataInputStream(new FileInputStream(file));int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = ins.read(bufferOut)) != -1) {outputStream.write(bufferOut, 0, bytes);// System.out.print("A");}// ⽂件流后⾯添加换⾏,否则⽂件后⾯的⼀个参数会丢失outputStream.write("\r\n".getBytes());// System.out.println("\r\n");}}if (entries != null && map.size() > 0) {buffer.delete(0, buffer.length());buffer.append("------footfoodapplicationrequestnetwork--\r\n");// System.out.println(buffer.toString());}outputStream.write(buffer.toString().getBytes());try {try {connection.connect();if (connection.getResponseCode() == 200) {in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String line = "";while ((line = in.readLine()) != null) {rs += line;}}} catch (Exception e) {System.out.println("发⽣异常");rs = null;}return rs;} finally {try {outputStream.close();if (in != null){in.close();}} catch (Exception e) {}outputStream = null;if (connection != null)connection.disconnect();connection = null;}}public static void main(String[] args) {String url = "http://localhost:";HashMap<String, Object> map = new HashMap<String, Object>();map.put("lineSta", "0121");map.put("devTypeId", "04");map.put("deviceId", "034");map.put("inOutType", "10");map.put("versionNo", "1016");map.put("deviceTime", String.valueOf(System.currentTimeMillis()));File file = new File("file/01.zip"); // ⽂件路径,基于项⽬,在项⽬根⽬录建⽴file⽂件夹,01.zipmap.put("logFileName", file.getName()); // 上传⽂件名,与⽂件保持⼀致,这⾥⾃动获取map.put("uploadFile",file); // 上传的⽂件String returnStr2 = "";try {returnStr2 = HttpUtil.postFormData(url, map);} catch (Exception e) {System.out.println("上传,发⽣异常" + e.getMessage());}System.out.println(returnStr2);}使⽤java from-data原始⽅式上传过于⿇烦,需要⼿动组装数据,过于⿇烦,这⾥帮⼤家写了⼀个demo,直接调⽤即可,启动想要看到form-data的原始数据格式,请解除System.out.print 打印注释。
Android开发之使用HttpURLConnection进行POST请求
Android开发之使⽤HttpURLConnection进⾏POST请求⼀、前提准备在开始实际编码之前,我们有必要先了解下将会⽤的类以及⽅法,进⾏⼀个⼤体的了解。
1.URL类这个类主要的功能是定位到要获取资源的⽹址以及打开连接.⽐如下⾯的代码:1 URL realurl = new URL("http:\\xxx.xxx.xxx\xx\xx\xx");2 realurl.openConnection();2.HttpURLConnection类该类才是我们这节的主⾓,连接设置都需要通过该类。
这⾥我们需要使⽤到很多的⽅法,⽐如设置请求⽅式为POST,为需要发送过去的数据以及设置超时时间,获得返回的数据。
下⾯列出了需要使⽤到的⽅法:1. setDoOutput(Boolean)设置是否可以写⼊数据2. setRequestMethod(String)设置请求的⽅式("GET"、"POST")3. OutputStream getOutputStream()获得输出流对象(其实通过这个就可以往这个请求⾥⾯写数据,这样⽹站那就可以获得数据了)4. InputStream getInputStream()获得输⼊流对象(其实就是最后⽹站返回过来的数据)3.PrintWriter类这个类的出现的原因是getOutputStream得到的OutputStream没法直接将字符串写⼊到输出流中,必须以char[]数据的⽅式写⼊,操作上⽐较⿇烦,所以使⽤这个类,可以很⽅便的直接将String写⼊到输出流中。
这⾥我只使⽤的写⼊输出流、刷新输出流、关闭输出流。
对应的⽅法如下:1. print(String) ⽤于写⼊输出流(就是把数据提交给⽹站)格式必须为(key=value&key1=value1)( 获取的⽅式为Request.Form["key"]来获取对应的值)2. flush() ⽴即刷新3. close()关闭输出流,进⾏操作之后必须使⽤上⾯已经介绍了所有要使⽤的⽅法,这⾥仅仅只是作为快速学习的⽅式。
三种POST和GET的提交方式
三种POST和GET的提交方式三种POST和GET的提交方式向服务器提交数据有两种方式,post和get。
两者的区别主要有三点,安全性、长度限制、数据结构。
其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体。
两种都是较为重要的数据提交方式。
现简单介绍一下三种post和get的提交方式。
无论是哪种方法实现post和get,get的访问路径都要携带数据,而post提交是把数据放在方法体中。
普通方法实现get/post提交:严格遵照Http协议进行数据传输。
在安卓开发环境下,由于主线程不能进行网络访问,因此需要在开启一个子线程向服务器提交数据。
为了更加直观的观察数据,可以在程序屏幕上显示服务器反馈信息。
又由于子线程无法更改UI界面,因此需要引入Hnndler代理器。
实现get/post提交基本步骤就是,获取URL路径,根据路径得到Http连接,用HttpURLConnection对象设置相关的http配置信息、提交方式以及获取反馈码。
当响应码为200时表示提交成功,可以通过HttpURLConnection以流的形式获取反馈信息。
普通GRT提交方式:publicvoidload(Viewview){finalStringqq=et_qq.getText().toString().trim();finalStringpwd=et_pwd.getText().toString().trim();if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){Toast.makeText(MainActivity.this,"qq号或密码为空",0).show();return;}finalStringpath="http://192.168.1.114:8080/qqload/qqload? qq="+qq+"&pwd="+pwd;newThread(){publicvoidrun(){try{URLurl=newURL(path);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setRequestMethod("GET"); conn.setReadTimeout(5000);intcode=conn.getResponseCode();if(code==200){InputStreamis=conn.getInputStream(); Stringresult=StreamTools.ReadStream(is); Messagemsg=Message.obtain(); msg.what=SUCCESS;msg.obj=result;handler.sendMessage(msg);}else{Messagemsg=Message.obtain(); msg.what=ERROR1;handler.sendMessage(msg);}}catch(Exceptione){//TODOAuto-generatedcatchblock e.printStackTrace(); Messagemsg=Message.obtain(); msg.what=ERROR2;handler.sendMessage(msg);}}}.start();}普通POST提交方式:复制代码publicvoidload(Viewview){finalStringqq=et_qq.getText().toString().trim(); finalStringpwd=et_pwd.getText().toString().trim();if(TextUtils.isEmpty(qq)||TextUtils.isEmpty(pwd)){Toast.makeText(MainActivity.this,"qq号或密码为空",0).show(); return;}finalStringpath="http://192.168.1.114:8080/qqload/qqload"; newThread(){publicvoidrun(){try{URLurl=newURL(path);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setRequestMethod("POST");conn.setReadTimeout(5000);conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");Stringdata="qq="+URLEncoder.encode(qq,"utf-8")+"&pwd="+URLEncoder.encode(pwd,"utf-8");conn.setRequestProperty("Content-Length",String.valueOf(data.length()));conn.setDoOutput(true);conn.getOutputStream().write(data.getBytes());intcode=conn.getResponseCode();if(code==200){InputStreamis=conn.getInputStream();Stringresult=StreamTools.ReadStream(is);Messagemsg=Message.obtain();msg.what=SUCCESS;msg.obj=result;handler.sendMessage(msg);}else{Messagemsg=Message.obtain(); msg.what=ERROR1;handler.sendMessage(msg);}}catch(Exceptione){//TODOAuto-generatedcatchblock e.printStackTrace(); Messagemsg=Message.obtain(); msg.what=ERROR2;handler.sendMessage(msg);}}}.start();}复制代码用httpclien实现get/post提交的只需要一下几个步骤:1.创建HttpClient对象,实现打开浏览器的功能HttpClientclient=newDefaultHttpClient();2.输入地址或者数据,用到HttpGet()或HttpPost(),传入要访问的路径,得到HttpGet或HttpPost对象。
Http四种常见的POST提交数据格式
Http四种常见的POST提交数据格式HTTP/1.1 协议规定的 HTTP 请求⽅法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这⼏种。
其中 POST ⼀般⽤来向服务端提交数据,本⽂主要讨论 POST 提交数据的⼏种⽅式。
我们知道,HTTP 协议是以 ASCII 码传输,建⽴在 TCP/IP 协议之上的应⽤层规范。
规范把 HTTP 请求分为三个部分:状态⾏、请求头、消息主体。
类似于下⾯这样:<method> <request-URL> <version><headers><entity-body>协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使⽤什么编码⽅式。
实际上,开发者完全可以⾃⼰决定消息主体的格式,只要最后发送的 HTTP 请求满⾜上⾯的格式就可以。
但是,数据发送出去,还要服务端解析成功才有意义。
⼀般服务端语⾔如 php、python 等,以及它们的 framework,都内置了⾃动解析常见数据格式的功能。
服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是⽤何种⽅式编码,再对主体进⾏解析。
所以说到 POST 提交数据⽅案,包含了 Content-Type 和消息主体编码⽅式两部分。
下⾯就正式开始介绍它们。
application/x-www-form-urlencoded这应该是最常见的 POST 提交数据的⽅式了。
浏览器的原⽣ form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded ⽅式提交数据。
请求类似于下⾯这样(⽆关的请求头在本⽂中都省略掉了):title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3⾸先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的⽅式进⾏编码,key 和 val 都进⾏了 URL 转码。
HttpClient发送Post,Get请求例子(包含设置请求头信息和获取返回头信息)
{
System.err.println("Method failed:"
+ postMethod.getStatusLine());
}
// (5)读取response头信息
Header headerResponse = postMethod
// getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
// new DefaultHttpMethodRetryHandler());
try
{
// (4)执行postMethod
int statusCode = httpClient.executeMethod(postMethod);
}
}
}
HttpClient发送Post,Get请求例子(包含设置请求头信息和获取返回头信息)
package com.test.action;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import mons.httpclient.DefaultHttpMethodRetryHandler;
.getResponseHeader("response_key");
String headerStr = headerResponse.getValue();
// (6)读取内容
byte[] responseBody = postMethod.getResponseBody();
简单介绍HTTP的请求(get请求和post请求)以及对应的响应的内容
简单介绍HTTP的请求(get请求和post请求)以及对应的响应的内容链接解析:http或者https表⽰使⽤的是http协议还是https协议,后⾯跟的是域名,往后到?之前叫路径,?之后叫参数多个参数⽤&符号连接消息头:请求⽅法:Get远程地址:221.230.3.228:443状态码:200 ok版本:HTTP/1.1请求⽅法:Get:请求获取request-URI所标识的资源POST:在request-URI所标识的资源后附加新的数据HEAD:请求获取由Request-URI所标识的资源的响应消息报头PUT:请求服务器存储⼀个资源,并⽤Request-URI作为其标识DELETE:请求服务器删除Request-URI所标识的资源TRACE:请求服务器回送收到的请求信息,主要⽤于测试或诊断CONNECT:保留将来使⽤OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求举例:Post⽅法:要求被请求的服务器接收附在请求后⾯的数据,常⽤于提交表单。
Requests由三部分组成:请求⾏,请求报头,请求正⽂有的浏览器请求头的上⾯会有⼀⾏GET 。
叫做请求⾏请求⾏:GET /.html HTTP/1.1请求头:Accept:*/*Accept-Encoding:gzip, deflate, brAccept-Language :zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Connection:keep-aliveCookie:route=4ded6ae40558cd54d12e1621…84322738F8DB18D60752944DFD1AACookie:84322738F8DB18D60752944DFD1AA Host:Referer:User-Agent:Mozilla/5.0 (Windows NT 6.1; W…) Gecko/20100101 Firefox/60.0各个请求头字段的含义:Accept:⽤于告诉服务器,客户机⽀持的数据类型Accept-Charset:告诉服务器客户机采⽤的编码Accept-Encoding:告诉服务器客户机⽀持的数据压缩格式Accept-Language:告诉服务器客户机所使⽤的语⾔Host:告诉服务器,想要访问的主机名字If-Hodified-Since:通过这个告诉服务器,资源的缓存时间Referer:告诉服务器它是通过哪个资源来访问服务器的(防盗链)User-Agent:客户机通过这个告诉服务器,客户机的软件环境,浏览器版本Cookie:通过这个向服务器带数据HTTP响应也包含三部分:状态⾏,消息报头,响应正⽂状态⾏:⽤于描述服务器对请求的处理结果。
http请求(get和post)
package com.hongyue.ai.utils;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import .HttpURLConnection;import .URL;import .URLConnection;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import ng.StringUtils;/*** HTTP通讯组件** @author <a href="mailto:cairenxi@">蔡仁西</a>* @version 1.0*/public class HttpUtils {/*** 客户端用Post方法向服务器提交请求,并获取服务器响应信息** @param request* @param response* @param s*/public static String reqForPost(String postURL, String context) {try {URL url = new URL(postURL);URLConnection urlConn = url.openConnection();HttpURLConnection httpUrlConn = (HttpURLConnection) urlConn;// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在// http正文内,因此需要设为true, 默认情况下是false;httpUrlConn.setDoOutput(true);// 设置是否从httpUrlConnection读入,默认情况下是truehttpUrlConn.setDoInput(true);// Post 请求不能使用缓存httpUrlConn.setUseCaches(false);// 设定请求的方法为"POST",默认是GEThttpUrlConn.setRequestMethod("POST");OutputStreamWriter wr = new OutputStreamWriter(httpUrlConn.getOutputStream());wr.write(context);wr.flush();BufferedReader in = new BufferedReader(new InputStreamReader(httpUrlConn .getInputStream()));String line;StringBuffer sb = new StringBuffer();while ((line = in.readLine()) != null) {sb.append(line);}wr.close();in.close();return StringUtils.trimToEmpty(sb.toString());} catch (Exception e) {e.printStackTrace();}return "";}/*** 客户端用Get方法向服务器提交请求,并获取服务器响应信息** @param request* @param response* @param s*/public static String reqForGet(String getURL) {try {URL url = new URL(getURL);URLConnection urlConn = url.openConnection();HttpURLConnection httpUrlConn = (HttpURLConnection) urlConn;// 默认情况下是false;httpUrlConn.setDoOutput(false);// 设置是否从httpUrlConnection读入,默认情况下是truehttpUrlConn.setDoInput(true);// Get 请求不能使用缓存httpUrlConn.setUseCaches(false);// 设定请求的方法为"GET",默认是GEThttpUrlConn.setRequestMethod("GET");BufferedReader in = new BufferedReader(new InputStreamReader(httpUrlConn .getInputStream()));String line;StringBuffer sb = new StringBuffer();while ((line = in.readLine()) != null) {sb.append(line);}in.close();return StringUtils.trimToEmpty(sb.toString());} catch (Exception e) {e.printStackTrace();}return "";}/*** 从输入流中读入数据** @param request* @param response* @param s*/public static String readBuffer(InputStreamReader in) { try {BufferedReader reader = new BufferedReader(in);String line = "";StringBuffer sb = new StringBuffer();while ((line = reader.readLine()) != null) {sb.append(line);}return StringUtils.trimToEmpty(sb.toString());} catch (Exception e) {e.printStackTrace();}return "";}/*** 响应调用者** @param req* @param res* @param s*/public static void res2Client(HttpServletRequest req,HttpServletResponse res, String s) {try {res.setContentType("text/plain;charset=gb2312");PrintWriter out = res.getWriter();out.print(s);out.flush();out.close();} catch (Exception e) {e.printStackTrace();}}/*** 获取请求客户端IP(包括穿透nginx集群代理)*/public static String getRemoteAddr(HttpServletRequest req) {String ip = req.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = req.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = req.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = req.getRemoteAddr();}return ip;}public static void main(String[] args) {String url ="http://61.152.167.97/TaoBaoInterface/billQuery.do?billNo=010*********&Key=VbmYfP6SeO6apmRAmgg67Q==";String ret =HttpUtils.reqForGet(url);System.out.println(ret);}}。
get请求和post请求的传递参数
get请求和post请求的传递参数Get请求和Post请求是网络开发中常用的两种传递参数的方式。
它们分别用于从服务器获取数据和向服务器发送数据。
下面我将用一个故事来形象地介绍这两种方式。
故事开始于一个小镇,小镇上有一家叫做“快乐杂货店”的商店。
这家商店销售各种商品,包括食品、饮料、家居用品等等。
商店老板是一位热情好客的中年人,他非常注重客户的需求和满意度。
有一天,一位名叫小明的顾客来到了快乐杂货店。
小明想要买一些食品和饮料,于是他向老板提出了自己的需求。
老板很热情地回答道:“好的,请告诉我你需要什么样的食品和饮料,我会帮你找到合适的。
”这就好比是一个Get请求,小明向老板传递了自己的需求,希望得到相应的结果。
小明告诉老板,他想要买一些巧克力和苹果汁。
老板听到后,立刻走到货架前,找到了巧克力和苹果汁,并拿给了小明。
小明很满意地付款离开了商店。
这就相当于是一个Get请求的响应,商店老板根据小明的需求,提供了相应的商品。
另一天,又有一位名叫小红的顾客来到了快乐杂货店。
小红需要购买一些家居用品,但是她并不清楚店里有什么样的产品。
于是,她向老板提出了一个请求:“请给我一份家居用品的目录,我想看看有什么可选的。
”这就相当于是一个Post请求,小红向老板发送了她的需求,希望得到相应的结果。
老板听到后,微笑着说:“好的,我会给你一份目录。
请稍等片刻。
”然后,老板拿出了一本精美的目录,递给了小红。
小红打开目录,看到了各种各样的家居用品,她非常开心地挑选了一些自己喜欢的产品。
最后,她把选好的商品交给了老板,并付款离开了商店。
这就相当于是一个Post请求的响应,商店老板根据小红的需求,提供了相应的目录。
通过这个故事,我们可以更好地理解Get请求和Post请求传递参数的方式。
Get请求适用于客户端向服务器获取数据,类似于小明向老板告诉自己的需求;而Post请求适用于客户端向服务器发送数据,类似于小红向老板提出自己的需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HttpURLConnection post提交实例
public static String getdata(){
String urlStr = "http://172.16.199.100:7001/pyxbcx/sshjq/web/sshjqcomm!jpyxbcx listcl.action";
String str = "";
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
StringBuffer params = new StringBuffer();
params.append("sql_itemno=1");
byte[] bypes = params.toString().getBytes();
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
conn.connect();
conn.getOutputStream().write(bypes);
conn.getOutputStream().flush();
conn.getOutputStream().close(); // flush and close
switch(conn.getResponseCode()) {
case 200:
InputStream is = conn.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line = "";
StringBuilder result = new StringBuilder();
while ((line = in.readLine()) != null)
result.append(line);
is.close();
str = result.toString();
break;
case 404:
str = "错误";
break;
case 500:
str = "错误2";
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
HttpURLConnection get提交实例
public static String getdata(){
// String urlStr = "http://172.16.199.100:7001/pyxbcx/sshjq/web/sshjqcomm!jpyxbcx listcl.action";
String urlStr = "http://localhost:8080/webquery/itemno/web/icc!itemstatuscn.ac tion?sql_ITEMNO=RB295114828CN";
String str = "";
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)");
conn.connect();
switch(conn.getResponseCode()) {
case 200:
InputStream is = conn.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String line = "";
StringBuilder result = new StringBuilder();
while ((line = in.readLine()) != null)
result.append(line);
is.close();
str = result.toString();
break;
case 404:
str = "错误";
break;
case 500:
str = "错误2";
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return str;
}。