`
535471267
  • 浏览: 13959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java中使用scoket模拟http post请求发送图片或文件

阅读更多

最近遇到个问题,两个系统共用用户的头像,用户的头像在一个系统中保存,这就涉及到将图片通过scoket发送给另一个系统存储的问题,最初的思路是将图片读成byte[]数组,然后发送,但又发现,发送图片的同时还要发送密钥、uid、username等信息,好通过对方系统的验证,这就不好弄了,最后想出来,将图片读成字符串、然后模拟http post请求,将图片和密钥、uid等信息发送过去,在服务器端,将得到的byte[]数组写进文件中,最后实验真的成功了,我做了整理和消化,也有不足,请指教,代码如下:

 

//客户端
public static String readFileAsString(String fileName) throws Exception {
			FileInputStream fis = new FileInputStream(fileName);
			BufferedInputStream in = new BufferedInputStream(fis);
			byte buffer[] = new byte[256];
			StringBuffer picStr=new StringBuffer();
			BASE64Encoder base64=new BASE64Encoder();
			while (in.read(buffer)>= 0){
				picStr.append(base64.encode(buffer));//进行64位编码
			}
			fis.close();
			fis=null;
			in.close();
			in=null;
			buffer=null;
			return picStr.toString();
		}
	 
		public static void main(String[] a) {   
	    	try {
				File file=new File("c:/雪狼突击队.jpg");
				//将文件读成字符串
				String picString=readFileAsString(file.toString());
				//URLEncode
				picString="picdata="+URLEncoder.encode(picString, "UTF-8");
				String url="http://localhost:8080/Test/index.jsp?uid=1&username=test&auth=098f6bcd4621d373cade4e832627b4f6";
				Socket socket =new Socket(InetAddress.getByName(url),80);
				DataOutputStream dos=new DataOutputStream(socket.getOutputStream());   
				String message=""
				+"POST   "+url+" HTTP/1.1 \r\n "
				+"Host: test.lingye.com \r\n "+"Accept: */* \r\n "
				+"Cache-Control:no-cache \r\n" +"User-Agent: MSIE6.0; \r\n "
				+"Content-Type: application/x-www-form-urlencoded   \r\n " 
				+"Content-Length: "+picString.length()+" \r\n "
				+"Connection: Close   \r\n\r\n"//报头以两个\n作为结束标志
				+picString+"\r\n ";//post数据  
				byte buffer[]=message.getBytes();   
				dos.write(buffer);
				dos.flush();
				dos.close();
				//以上只进行了发送操作
				socket.close();
			} catch (Exception e) {
				e.printStackTrace();
			} 
		}   

//服务器端
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String picdata=request.getParameter("picdata");
		BASE64Decoder base64=new BASE64Decoder();
		//64位解码
		byte[] buffer=base64.decodeBuffer(picdata);
		//写进文件
		FileOutputStream fos=new FileOutputStream("c:/雪狼突击队1.jpg");
		fos.write(buffer);
		fos.flush();
		fos.close();
		fos=null;
	}

 

代码很粗糙,大家看原理就好了,我试过上传.rar也是可以的

2
0
分享到:
评论
1 楼 北极光之吻 2012-05-22  
学习了,继续学习...
问一下啊,java有没有办法实现类似:用IOCP和winsock事件选择模型分别写一段服务器和客户端程序 的问题,老师让我们用C++,我不想用C++写

相关推荐

    使用socket post 数据到http和https

    在实际编码过程中,我们可以使用Java的Socket类和OutputStreamWriter类来构建并发送POST请求。以下是一个简单的示例: ```java Socket socket = new Socket("hostname", port); OutputStream out = socket....

    使用Socket 完成HTTP post方式的文本及文件上传 demo

    HTTP POST方法常用于向服务器发送数据,如表单数据或文件。在文件上传场景中,POST方法允许客户端(通常是浏览器)将文件内容发送到服务器。下面我们将详细介绍如何使用Socket来模拟这个过程。 首先,我们需要创建...

    Android下socket模拟http server

    在Android平台上,我们可以利用Socket编程来模拟一个简单的HTTP服务器,以提供本地文件系统中的资源,如HTML文件,供外部设备(如浏览器)访问。这个过程涉及到Android系统的网络权限管理、Socket编程以及HTTP协议的...

    java socket 学习资料

    Socket在Java中被广泛用于构建客户端-服务器应用,例如创建Web服务器、聊天应用程序、文件传输等。以下是一些关于Java Socket的重要知识点: 1. **Socket类与ServerSocket类**: - `Socket`类代表网络通信中的...

    Java实现的Https请求工具类

    对于POST请求,需要先写入请求体,然后读取响应。 ```java connection.connect(); int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { BufferedReader in = ...

    HTTP.zip_HTTP 调试_http socket_java http post

    模拟HTTP协议,Java 发送 http 请求 (get 与 post 方法请求 ) , 以下代码经本人亲自调试可用! 可以直接使用之。 注意:通过 BufferedReader 读取远程返回的数据时,必须设置读取编码,否则中文会乱码!

    tcp_http.rar_http socket_http下载_socket 下载_socket下载http_tcp http

    当我们谈论"socket下载http"时,通常是指使用Socket编程来实现HTTP客户端,模拟浏览器发送HTTP请求到服务器,然后接收服务器返回的文件数据。HTTP请求通常包括方法(如GET或POST)、URL、协议版本、头部和可能的主体...

    最新版java模拟QQ登录空间

    在模拟QQ登录的过程中,Java的Socket编程或HttpURLConnection API会被用来发送HTTP请求到QQ的服务器,完成登录验证。了解HTTP协议的基本原理,如GET、POST请求,请求头和响应头的设置,是进行这项工作的基础。 其次...

    sockettest

    - **模拟请求**:SocketTest可以模拟各种HTTP请求,如GET、POST等,帮助测试服务器对不同请求类型的响应。 - **请求头定制**:允许用户自定义请求头,如User-Agent、Accept、Content-Type等,以便模拟不同客户端的...

    基于netty实现请求和tcpclient通讯(使用postman和NetAssist通讯)

    使用postman发送post携带body的请求,通过中间件发送至NetAssist,实现两者之间的通讯 技术:netty

    HTTP请求报文拦截与篡改源码1

    至于"source"和"build"这两个文件,"source"很可能包含了源代码文件,可能是用Python、Java、C++或其他支持网络编程的语言编写,而"build"可能包含了编译或构建项目的相关文件,如配置脚本、编译后的二进制文件或...

    SE_JAVA_EXP_E047.zip

    Java中,可以通过HttpURLConnection的setDoOutput(true)来启用POST数据发送,然后使用DataOutputStream写入数据。 总的来说,这个压缩包"SE_JAVA_EXP_E047.zip"是一个关于Java网络编程的学习资源,特别关注的是如何...

    使用java控制HTTP协议客户端应用.pdf

    POST请求体包含提交的数据(`content`),在发送请求后,同样接收服务器的响应。 4. **其他辅助方法**: - `checkHTTP(url)`:检查URL的格式,确保其符合HTTP请求的要求。 - `openServer(host, port)`:建立到...

    Jmeter Java Request Demo

    在JMeter中使用Java Request进行TCP测试,你需要编写Java代码来建立TCP连接,发送数据,并处理服务器返回的数据。这通常涉及到Socket编程,包括Socket的创建、数据的编码与解码等步骤。 HTTP请求则是我们最常见的...

    HTTP的请求模型

    在编程语言如Java中,可以使用如下代码来模拟这一过程: ```java Socket socket = new Socket("www.myweb.com", 8080); InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); ...

    http.rar_HTTP java_http server java_java http_java web simple

    在Java中,我们可以使用多种方式实现HTTP服务器,例如使用内置的`HttpServer`类(Java 6及以上版本)或第三方库如Jetty、Tomcat等。这些服务器可以接收HTTP请求,并返回HTTP响应。基础的HTTP服务器通常会解析请求的...

    java代码实现的登录注册上传的功能

    这通常涉及到HTTP协议的POST请求,以及对上传文件的大小、类型等进行限制和验证,以保证服务端的稳定性和安全性。 7. **数据持久化**:用户信息和上传的文件需要持久化存储,以便于后续访问和管理。这可能涉及到...

    J2ME开发实例6.rar_SocketTest.jar_httptest.j

    httptest.j可能包含了一系列方法,用于构建GET或POST请求,设置HTTP头信息,并解析服务器返回的HTTP响应。 压缩包内的“www.pudn.com.txt”可能是从www.pudn.com这个网站下载资源时附带的说明文件,通常包含版权...

    Java实现仿QQ登陆模式

    如果选择HTTP协议,`HttpURLConnection`更易于使用,支持GET和POST请求,适合发送登录信息。POST请求常用于发送用户登录数据,因为它们可以携带更多的信息且不显示在URL上,确保了数据的安全性。 其次,用户验证...

    HTTP Class for PHP , 支持 Curl 和 Socket

    - **网页抓取**:HTTP Class可以用来抓取网页内容,通过GET请求获取HTML,或者通过POST请求提交表单数据。 - **API交互**:在与RESTful API进行交互时,HTTP Class可以帮助构造和发送JSON或XML数据。 - **上传/...

Global site tag (gtag.js) - Google Analytics