重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

通过java代码发送请求 通过java代码发送请求文件

Java利用HttpURLConnection发送post请求上传文件

在页面里实现上传文件不是什么难事 写个form 加上enctype = multipart/form data 在写个接收的就可以了 没什么难的 如果要用 HttpURLConnection来实现文件上传 还真有点搞头 : )

10多年的门源网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整门源建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“门源网站设计”,“门源网站推广”以来,每个客户项目都认真落实执行。

先写个servlet把接收到的 HTTP 信息保存在一个文件中 看一下 form 表单到底封装了什么样的信息

Java代码

public void doPost(HttpServletRequest request HttpServletResponse response)

throws ServletException IOException {

//获取输入流 是HTTP协议中的实体内容

ServletInputStream  in=request getInputStream();

//缓冲区

byte buffer[]=new byte[ ];

FileOutputStream out=new FileOutputStream( d:\\test log );

int len=sis read(buffer );

//把流里的信息循环读入到file log文件中

while( len!= ){

out write(buffer len);

len=in readLine(buffer );

}

out close();

in close();

}

来一个form表单

form name= upform action= upload do method= POST

enctype= multipart/form data

参数input type= text name= username /br/

文件 input type= file name= file /br/

文件 input type= file name= file /br/

input type= submit value= Submit /

br /

/form

假如我参数写的内容是hello word 然后二个文件是二个简单的txt文件 上传后test log里如下

Java代码

da e c

Content Disposition: form data; name= username

hello word

da e c

Content Disposition: form data; name= file ; filename= D:\haha txt

Content Type: text/plain

haha

hahaha

da e c

Content Disposition: form data; name= file ; filename= D:\huhu txt

Content Type: text/plain

messi

huhu

da e c

研究下规律发现有如下几点特征

第一行是 d b bc 作为分隔符 然后是 \r\n 回车换行符 这个 d b bc 分隔符浏览器是随机生成的

第二行是Content Disposition: form data; name= file ; filename= D:\huhu txt ;name=对应input的name值 filename对应要上传的文件名(包括路径在内)

第三行如果是文件就有Content Type: text/plain 这里上传的是txt文件所以是text/plain 如果上穿的是jpg图片的话就是image/jpg了 可以自己试试看看

然后就是回车换行符

在下就是文件或参数的内容或值了 如 hello word

最后一行是 da e c 注意最后多了二个 ;

有了这些就可以使用HttpURLConnection来实现上传文件功能了

Java代码 public void upload(){

ListString list  = new ArrayListString();  //要上传的文件名 如 d:\haha doc 你要实现自己的业务 我这里就是一个空list

try {

String BOUNDARY = d a d c ; // 定义数据分隔线

URL url = new URL( );

HttpURLConnection conn = (HttpURLConnection) url openConnection();

// 发送POST请求必须设置如下两行

conn setDoOutput(true);

conn setDoInput(true);

conn setUseCaches(false);

conn setRequestMethod( POST );

conn setRequestProperty( connection Keep Alive );

conn setRequestProperty( user agent Mozilla/ (patible; MSIE ; Windows NT ; SV ) );

conn setRequestProperty( Charsert UTF );

conn setRequestProperty( Content Type multipart/form data; boundary= + BOUNDARY);

OutputStream out = new DataOutputStream(conn getOutputStream());

byte[] end_data = ( \r\n + BOUNDARY + \r\n ) getBytes();// 定义最后数据分隔线

int leng = list size();

for(int i= ;ileng;i++){

String fname = list get(i);

File file = new File(fname);

StringBuilder *** = new StringBuilder();

*** append( );

*** append(BOUNDARY);

*** append( \r\n );

*** append( Content Disposition: form data;name=\ file +i+ \ ;filename=\ + file getName() + \ \r\n );

*** append( Content Type:application/octet stream\r\n\r\n );

byte[] data = *** toString() getBytes();

out write(data);

DataInputStream in = new DataInputStream(new FileInputStream(file));

int bytes = ;

byte[] bufferOut = new byte[ ];

while ((bytes = in read(bufferOut)) != ) {

out write(bufferOut bytes);

}

out write( \r\n getBytes()); //多个文件时 二个文件之间加入这个

in close();

}

out write(end_data);

out flush();

out close();

// 定义BufferedReader输入流来读取URL的响应

BufferedReader reader = new BufferedReader(new InputStreamReader(conn getInputStream()));

String line = null;

while ((line = reader readLine()) != null) {

System out println(line);

}

} catch (Exception e) {

System out println( 发送POST请求出现异常! + e);

e printStackTrace();

}

lishixinzhi/Article/program/Java/hx/201311/27114

JAVA代码发送HTTP请求问题(我想实现和服务器进行一次连接时发送两次请求)

我觉得你这个问题的解决应该是你的程序做一次这个网站的登陆,而且这个登陆的动作应该是需要发生在你这段代码以前,因为你这段代码的动作其实只是访问了一下那个网站,但是没有任何的用户或者是其他的信息。

一般来说你登陆以后,你会获得一个token,用那个token就可以让网站认为你已经登陆,然后改密码什么就好办了。建议你先抓一下IE的包看看是人家的通信是怎么样的,然后用java做就好了。或者是那个网站有开发者文档就最好了。

java如何向网页发出请求,并接收

这是J2EE里面的内容,你将form表单里面的URL改为服务器里面的servlet的访问URL,服务器就可以处理html发过来的请求,然后由servlet跳转到原来访问网页,并将处理好的数据一起发过来,原来html可以通过AJAX编程来接受来自服务器的请求,并进行控制显示!!!

如何使用java发送post请求

/**

* 向指定 URL 发送POST方法的请求

*

* @param url

* 发送请求的 URL

* @param param

* 请求参数,请求参数应该是 name1=value1name2=value2 的形式。

* @return 所代表远程资源的响应结果

*/

public static String sendPost(String url, String param) {

PrintWriter out = null;

BufferedReader in = null;

String result = "";

try {

URL realUrl = new URL(url);

// 打开和URL之间的连接

URLConnection conn = realUrl.openConnection();

// 设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

// 获取URLConnection对象对应的输出流

out = new PrintWriter(conn.getOutputStream());

// 发送请求参数

out.print(param);

// flush输出流的缓冲

out.flush();

// 定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(

new InputStreamReader(conn.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

result += line;

}

} catch (Exception e) {

System.out.println("发送 POST 请求出现异常!"+e);

e.printStackTrace();

}

//使用finally块来关闭输出流、输入流

finally{

try{

if(out!=null){

out.close();

}

if(in!=null){

in.close();

}

}

catch(IOException ex){

ex.printStackTrace();

}

}

return result;

}

JAVA代码给网站发送HTTP请求时能不能只发送请求而不接受网站返回的数据?

个人想法是这样的 你用的是HttpURLConnection 类

也就是说这个协议是http协议

超文本传输就是你发送了一个请求然后服务器给你答复,所以只要你把包发出去一定有响应

可以不用http请求看看比如只用sockt建立一个

另外有一个URLConnection 就是HttpURLConnection 的父类存在一个setDoInput方法 你看看能不能通过这个来设置

我的抓包工具不能用所以代码没法帮你调

要不推荐个工具给我吧

java 怎么发送一个http请求

这里有整套的Java发送HTTP请求的代码,包括Post、Get、Delete、Put、Trace、Head、Options请求方法,链接如下:

然后线上实力Demo:


文章名称:通过java代码发送请求 通过java代码发送请求文件
文章地址:http://cqcxhl.com/article/hgcgep.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP