- 浏览: 101505 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hgg923:
通俗易懂,看一遍就把这么多年的雾水解清,赞
IOC和DI(控制反转和依赖注入)通俗解析 -
love.javaee:
你的jar包呢。。。
java 将汉字转换为全拼及返回中文的首字母 -
cngolon:
HeartArea 写道登陆上来告诉你你的代码贴的真的是很乱的 ...
java httpURL连接远程服务器并返回数据(httpurlconnection) -
kilometo:
这应该是core java的东东吧!
java httpURL连接远程服务器并返回数据(httpurlconnection) -
HeartArea:
登陆上来告诉你你的代码贴的真的是很乱的啊,哥哥!
java httpURL连接远程服务器并返回数据(httpurlconnection)
java httpURL连接远程服务器并返回数据(httpurlconnection)
- 博客分类:
- javaweb开发
Java发送http请求 (get 与 post方法请求),以下代码经本人亲自调试可用!可以直接使用之。
注意:通过BufferedReader 读取远程返回的数据时,必须设置读取编码,否则中文会乱码!
package com.jiucool.www.struts.action;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class post_request {
public static final String GET_URL = "http://www.cngolon.com/request.action?key=j0r56u2";
public static final String POST_URL = "http://www.cngolon.com/request.action";
//get()请求
public static void readContentFromGet()throws IOException{
// 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码
String getURL = GET_URL +"&activatecode="+URLEncoder.encode("中国聚龙", "utf-8");
URL getUrl =new URL(getURL);
// 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
// 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection
HttpURLConnection connection = (HttpURLConnection)getUrl.openConnection();
// 进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到
// 服务器
connection.connect();
// 取得输入流,并使用Reader读取
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
//设置编码,否则中文乱码
System.out.println("=============================");
System.out.println("Contents of get request");
System.out.println("=============================");
String lines;
while((lines =reader.readLine())!=null){
//lines = new String(lines.getBytes(), "utf-8");
System.out.println(lines);
}
reader.close();
// 断开连接
connection.disconnect();
System.out.println("=============================");
System.out.println("Contents of get request ends");
System.out.println("=============================");
}
//post()请求
public static void readContentFromPost()throws IOException{
// Post请求的url,与get不同的是不需要带参数
URL postUrl = new URL(POST_URL);
// 打开连接
HttpURLConnection connection = (HttpURLConnection)postUrl.openConnection();
// Output to the connection. Default is
// false, set to true because post
// method must write something to the
// connection
// 设置是否向connection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true
connection.setDoOutput(true);
// Read from the connection. Default is true.
connection.setDoInput(true);
// Set the post method. Default is GET
connection.setRequestMethod("POST");
// Post cannot use caches
// Post 请求不能使用缓存
connection.setUseCaches(false);
// This method takes effects to
// every instances of this class.
// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
// connection.setFollowRedirects(true);
// This methods only
// takes effacts to this
// instance.
// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
connection.setInstanceFollowRedirects(true);
// Set the content type to urlencoded,
// because we will write
// some URL-encoded content to the
// connection. Settings above must be set before connect!
// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
// 进行编码
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
// 要注意的是connection.getOutputStream会隐含的进行connect。
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
// The URL-encoded contend
// 正文,正文内容其实跟get的URL中'?'后的参数字符串一致
String content ="key=j0r53nmbbd78x7m1pqml06u2&type=1&toemail=cngolon@gmail.com"+"&activatecode="+URLEncoder.encode("中国聚龙", "utf-8");
// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
out.writeBytes(content);
out.flush();
out.close();
// flush and close
BufferedReader reader =new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
//设置编码,否则中文乱码
String line="";
System.out.println("=============================");
System.out.println("Contents of post request");
System.out.println("=============================");
while((line =reader.readLine())!=null){
//line = new String(line.getBytes(), "utf-8");
System.out.println(line);
}
System.out.println("=============================");
System.out.println("Contents of post request ends");
System.out.println("=============================");
reader.close();
connection.disconnect();
}
}
HttpURLConnection.connect 函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。无论是 post还是get,http请求实际上直到HttpURLConnection.getInputStream()这个函数里面才正式发送出去。
在readContentFromPost() 中,顺序是重中之重,对connection对象的一切配置(那一堆set函数)都必须要在connect()函数执行之前完成。而对 outputStream的写操作,又必须要在inputStream的读操作之前。这些顺序实际上是由http请求的格式决定的。
http 请求实际上由两部分组成,一个是http头,所有关于此次http请求的配置都在http头里面定义,一个是正文content,在connect()函 数里面,会根据HttpURLConnection对象的配置值生成http头,因此在调用connect函数之前,就必须把所有的配置准备好。
紧接着http头的是http请求的正文,正文的内容通过outputStream写入,实际上outputStream不是一个网络流,充其量是个字符串流,往里面写入的东西不会立即发送到网络,而是在流关闭后,根据输入的内容生成http正文。
至此,http请求的东西已经准备就绪。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器了,然后 返回一个输入流,用于读取服务器对于此次http请求的返回信息。由于http请求在getInputStream的时候已经发送出去了(包括http头 和正文),因此在getInputStream()函数之后对connection对象进行设置(对http头的信息进行修改)或者写入 outputStream(对正文进行修改)都是没有意义的了,执行这些操作会导致异常的发生。
评论
谢谢啊,刚弄,不会排版
发表评论
-
WEB.XML中元素加载顺序及其详解
2015-12-15 16:18 855一、概述 1、启动一个WEB项目的时候,WEB容器会去读取 ... -
基于spring的简单SSO单点登录
2015-12-09 11:01 8015通常稍微规模大一些的企业,内部已经有很多的应用系统,多个系 ... -
windows mysql 自动备份的几种方法
2015-08-25 16:03 421基于之前的文章方法,加入批处理命令即可实现自动备份 ... -
java敏感词过虑-基于多叉树原理
2015-06-17 10:35 1583基于多叉树的敏感词、关键词过滤的工具包,用于java中的敏感 ... -
java生成随机数
2015-05-05 15:10 663方法一: /** * 生成随机数 * @author ... -
深入浅出Java三大框架SSH与MVC的设计模式
2015-02-26 22:27 719现在许许多多的初学者 ... -
HttpURLConnection上传文件(图片)
2014-02-14 11:18 11658HttpURLConnection上传文件(图片) 需求 ... -
JS实现商品购买数量加减
2013-12-18 10:01 38111、效果图: 附件中 2、JS验证方法: va ... -
检查URL是否ping通
2013-11-21 10:09 834/** * 检查URL是否ping通 * ... -
检验文本框中输入的是否为空格
2013-08-07 17:30 2988注:特别是文本框中输入的全是空格的时候,不需要循环验证 ... -
根据struts的FormFile来上传文件
2012-10-30 13:41 3429package com.score.web.action.pi ... -
用户权限体系
2012-09-27 10:07 919用户权限体系 组织结构 用户: ... -
jsp页面常用js验证代码总结
2012-07-30 11:39 22351、 //判断替换字符串前后半角和全角空格后的字符串 ... -
MD5加密
2012-07-02 08:25 725package com.score.common.util; ... -
Struts1基于Json数据格式的ExtJs单选树(Struts1+Spring+Hibernate)
2012-07-02 08:23 1668功能描述:根据Json格式数据生成单选树,然后将选择后的数据回 ... -
kindeditor留言板
2012-07-02 08:09 2507该留言板我只选中了其中部分工具栏,这个可以根据自己的需要进行设 ... -
java 将汉字转换为全拼及返回中文的首字母
2012-06-29 22:10 5749package com.tjp.test;import net ...
相关推荐
JAVA 根据Url 接口 获取文件名称和类型,亲测可用。输入参数地址即可。
通过Java的网络编程能力,开发人员可以创建客户端-服务器应用程序、实现数据传输、远程调用等功能。 Java的网络编程通常涉及以下几个方面: Socket编程:基于Socket套接字,通过TCP或UDP协议进行网络通信。通过...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本书内容全面,涵盖了从网络基础知识到远程方法调用(RMI)等各方面的内容,书中章节涉及到TCP和UDP socket、服务器socket、URL和URI、组播以及特殊用途的API(如JavaMail)等等。本书展示了如何使用JSSE编写安全的...
本文实例讲述了JSP实现远程文件下载保存到服务器指定目录中的方法。分享给大家供大家参考,具体如下: <%@page import=java.net.*,java.io.*%> <%! public boolean saveUrlAs(String photoUrl, ...
8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17 地震速报!——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——...
8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17 地震速报!——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——...
8.16 访问网站LoginAPI——远程服务器验证程序运行权限 8.17 地震速报!——HttpURLConnection与Service侦测服务 第9章 Google服务与Android混搭 9.1 Google帐号验证Token——AuthSub 9.2 Google搜索——...