Java 使用 Netty DefaultFullHttpRequest 實現Post發送數據包的功能

		// 向SQLMAPAPI傳送開始測試的指令
		NioEventLoopGroup workerGroup = new NioEventLoopGroup();
		try {
			Bootstrap bootstrap = new Bootstrap();
			bootstrap.group(workerGroup).channel(NioSocketChannel.class).option(ChannelOption.SO_KEEPALIVE, true)
					.handler(new ChannelInitializer<SocketChannel>() {
						@Override
						protected void initChannel(SocketChannel socketChannel) throws Exception {
							socketChannel.pipeline().addLast(new HttpRequestEncoder());// 客戶端對發送的httpRequest進行編碼
							socketChannel.pipeline().addLast(new HttpResponseDecoder());// 客戶端需要對服務端返回的httpresopnse解碼
							socketChannel.pipeline().addLast(new StartTestResponse());
						}
					});

			Channel channel = bootstrap.connect("127.0.0.1", 8775).sync().channel();


			// *** 生成post傳送的uri
			URI uri = new URI("/scan/" + taskid + "/start");

            // *** 設置POST數據包中傳輸的數據 ***
            String content = "hello post";

			FullHttpRequest requestToSQLMAPAPI = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST,
					uri.toASCIIString(), Unpooled.wrappedBuffer(content.getBytes("UTF-8")));

			requestToSQLMAPAPI.headers().set(HttpHeaders.Names.HOST, "127.0.0.1");
			requestToSQLMAPAPI.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
			requestToSQLMAPAPI.headers().set(HttpHeaders.Names.CONTENT_LENGTH,
					requestToSQLMAPAPI.content().readableBytes());
			requestToSQLMAPAPI.headers().set(HttpHeaders.Names.CONTENT_TYPE, "application/json");

			// headers.set("Host", "127.0.0.1");
			// headers.set("Connection", HttpHeaderValues.CLOSE);
			// headers.set("Content-Type", "application/json");
			// headers.set("Content-Length", "" + contentByteBuf.capacity());
			// headers.set("User-Agent", "Python-urllib/2.7");
			// headers.set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP + "," +
			// HttpHeaderValues.DEFLATE);
			// headers.set(HttpHeaderNames.ACCEPT_CHARSET,
			// "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
			// headers.set(HttpHeaderNames.ACCEPT_LANGUAGE, "fr");
			// headers.set(HttpHeaderNames.USER_AGENT, "Netty Simple Http Client side");
			// headers.set(HttpHeaderNames.ACCEPT,
			// "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
			// headers.set(HttpHeaderNames.HOST, "127.0.0.1:8775");
			// headers.set(HttpHeaderNames.CONTENT_TYPE, "application/json");
			// headers.set(HttpHeaderNames.CONNECTION, "close");
			// headers.set(HttpHeaderNames.USER_AGENT, "Python-urllib/2.7");

			// *
			// *** 輸出requestToSQLMAPAPI的內容
			System.out.println("---requestToSQLMAPAPI---");
			System.out.println(requestToSQLMAPAPI.toString());
			System.out.println();
			System.out.println(requestToSQLMAPAPI.content().toString(0, requestToSQLMAPAPI.content().capacity(),
					Charset.defaultCharset())); //
			// */

			// send request
			channel.writeAndFlush(requestToSQLMAPAPI).sync();
			channel.closeFuture().sync();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (URISyntaxException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} finally {
			workerGroup.shutdownGracefully();
		}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章