概述:使用UrlConnection 、Socket以及HttpClient模拟Http请求,
本地回环IP地址不要以为只有127.0.0.1,经过测试发现127.0.0.1 ---> 127.255.255.254(去掉0和255) 的范围都是本地回环地址。 所以见到这些奇怪的IP不要惊讶。他们也代表本地IP等价localhost
package cn.com.testhttp;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.Socket;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
@SuppressWarnings("deprecation")
public class HttpDemo {
///*
// POST /kafka/servlet/HelloWorld HTTP/1.1
//Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, */*
//Referer: http://pc-201202011834:8080/kafka/
//Accept-Language: zh-cn
//User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
//Content-Type: application/x-www-form-urlencoded
//Accept-Encoding: gzip, deflate
//Host: pc-201202011834:8080
//Content-Length: 10
//Connection: Keep-Alive
//Cache-Control: no-cache
//Cookie: JSESSIONID=DA68F6AA45759761250341A4783642A5
/**
* 模拟Http请求
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
/* valid HTTP methods */
// private static final String[] methods = {"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"};
//PostUrlConnectionMethod();
//getSocket();
//postSocket();
//getUrlConnectionMethod();
//postUrlConnectionMethod();
//getHttpClientMethod();
postHttpClientMethod();
}
private static void postSocket() throws Exception {
String host = "127.0.1.4";
int port = 8080;
Socket socket = new Socket(host, port);
String msg ="msg=postSocket&address=SZ";
StringBuffer sb = new StringBuffer("POST /kafka/servlet/HelloWorld HTTP/1.1").append("\r\n");
sb.append("Connection: Keep-Alive").append("\r\n");
sb.append("Accept: */*").append("\r\n");
sb.append("Host: xxxxxxx").append("\r\n");
sb.append("Content-Type: application/x-www-form-urlencoded").append("\r\n");
sb.append("Content-Length: ").append(msg.getBytes().length).append("\r\n");
sb.append("\r\n");
sb.append(msg).append("\r\n");
sb.append("\r\n");
System.out.println(sb.toString());
// 发出HTTP请求
OutputStream socketOut = socket.getOutputStream();
socketOut.write(sb.toString().getBytes());
socket.shutdownOutput(); // 关闭输出流
// 接收响应结果
System.out.println(socket);
//关闭资源释放链接
}
private static void getSocket() throws Exception {
String host = "127.0.1.4";
int port = 8080;
Socket socket = new Socket(host, port);
String msg ="msg=getSocket&address=SZ";
StringBuffer sb = new StringBuffer("GET /kafka/servlet/HelloWorld?"+msg+" HTTP/1.1").append("\r\n");
sb.append("Connection: Keep-Alive").append("\r\n");
sb.append("Accept: */*").append("\r\n");
sb.append("Host: xxxxxxx").append("\r\n");
sb.append("\r\n");
System.out.println(sb.toString());
// 发出HTTP请求
OutputStream socketOut = socket.getOutputStream();
socketOut.write(sb.toString().getBytes());
socket.shutdownOutput(); // 关闭输出流
// 接收响应结果
System.out.println(socket);
//关闭资源释放链接
}
private static void postUrlConnectionMethod() throws Exception {
URL url = new URL("http://127.0.1.4:8080/kafka/servlet/HelloWorld");
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setRequestMethod("POST");
// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, 默认情况下是false;
httpUrlConnection.setDoOutput(true);
//设置是否从httpUrlConnection读入,默认情况下是true;
httpUrlConnection.setDoInput(true);
// Post 请求不能使用缓存
httpUrlConnection.setUseCaches(false);
//设置超时时间和请求类型
httpUrlConnection.setConnectTimeout(30000);
httpUrlConnection.setReadTimeout(30000);
httpUrlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//连接,
httpUrlConnection.connect();
//参数要放在 http正文内
OutputStream out = httpUrlConnection.getOutputStream();
String msg ="msg=Hello&address=SZ";
out.write(msg.getBytes());
out.flush();
out.close();
InputStream in = httpUrlConnection.getInputStream();
//关闭资源释放链接
}
private static void getUrlConnectionMethod() throws Exception {
URL url = new URL("http://127.0.1.4:8080/kafka/servlet/HelloWorld?msg=getUrlConnectionMethod&address=SZ");
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setRequestMethod("POST");
// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, 默认情况下是false;
httpUrlConnection.setDoOutput(true);
//设置是否从httpUrlConnection读入,默认情况下是true;
httpUrlConnection.setDoInput(true);
// Post 请求不能使用缓存
httpUrlConnection.setUseCaches(false);
//设置超时时间和请求类型
httpUrlConnection.setConnectTimeout(30000);
httpUrlConnection.setReadTimeout(30000);
httpUrlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//连接,
httpUrlConnection.connect();
//注意此句代码必须要保留处理请求结果,即使没有结果也要保留否则不会提交
InputStream in = httpUrlConnection.getInputStream();
}
/**
httpcomponents\httpcore\4.4.4\httpcore-4.4.4.jar
httpcomponents\httpclient\4.4.1\httpclient-4.4.1.jar
commons-logging\commons-logging\1.2\commons-logging-1.2.jar
commons-codec\commons-codec\1.9\commons-codec-1.9.jar
* @throws Exception
*/
private static void getHttpClientMethod() throws Exception {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://127.0.1.4:8080/kafka/servlet/HelloWorld?msg=getHttpClientMethod&address=SZ");
HttpResponse response = httpClient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
int l;
byte[] tmp = new byte[2048];
while ((l = instream.read(tmp)) != -1) {
}
}
//关闭资源释放链接
}
private static void postHttpClientMethod() throws Exception {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://127.0.1.4:8080/kafka/servlet/HelloWorld");
String content ="msg=postHttpClientMethod&address=SZ";
//HttpParams params = new BasicHttpParams();
//params.setParameter("msg", "postHttpClientMethod");
//params.setParameter("address", "WhoAmI");
//httpPost.setParams(params);
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("msg","postHttpClientMethod"));
parameters.add(new BasicNameValuePair("address","SZ"));
UrlEncodedFormEntity ent = new UrlEncodedFormEntity(parameters,HTTP.UTF_8);
httpPost.setEntity(ent);
HttpResponse response = httpClient.execute(httpPost);
System.out.println(response.getStatusLine());
System.out.println(response.getEntity().toString());
HttpEntity entity = response.getEntity();
//关闭资源释放链接
}
}
相关推荐
Java作为一种多用途的编程语言,提供了丰富的库来帮助开发者模拟HTTP请求,使得我们可以在程序中实现与服务器的交互,比如发送GET、POST请求,获取网页数据,甚至进行文件上传等操作。本教程将详细讲解如何使用Java...
Java 模拟 HTTP 请求的错误问题整理 Java 模拟 HTTP 请求是一种常见的编程技术,然而在实际应用中,我们经常会遇到各种错误问题。下面是对 Java 模拟 HTTP 请求的错误问题的整理和分析。 问题一:Illegal ...
在Java编程中,模拟HTTP请求是一项常见的任务,尤其在网页抓取、自动化测试以及网络数据获取等场景下。本项目涉及的关键技术点是利用HTTP客户端库进行登录操作,并抓取海投网的数据,随后将这些信息存储到MySQL...
在Java编程中,发送HTTP请求是一项常见的任务,无论是获取网页数据、调用API接口还是进行自动化测试,都可能涉及到。本篇文章将详细讲解一个简单的Java工具类,用于发送HTTP请求,该工具类名为HttpURLUtils。 首先...
java模拟客户端向服务器发送post请求
这些需求可以通过模拟HTTP请求的方式实现。本篇文章将详细介绍如何使用Java语言来模拟发送网页请求,并特别关注POST请求及Cookie的处理。 #### 二、模拟发送GET请求 首先,我们来看看如何使用Java的`java.net.URL`...
主要分为以下几个部分:Http请求的基本概念、模拟Http请求的必要性、Apache HttpClient库的介绍及其在Java中的使用方法。 ### Http请求基本概念 Http(Hypertext Transfer Protocol)是用于从WWW服务器传输超文本...
在Java编程中,有时我们需要模拟浏览器发送HTTP请求,例如调用外部接口或API。`HttpURLConnection`是Java标准库提供的一种轻量级的HTTP客户端,它允许我们在后台代码中发送GET和POST请求。本篇文章将深入讲解如何...
Java模拟HTTP请求是一种常见的网络通信技术,用于向服务器发送数据或获取服务器的响应。在这个场景中,我们将讨论如何使用Java来模拟HTTP请求并通过中国移动的飞信服务发送免费短信。飞信是一个允许用户发送免费短信...
在实际开发中,这样的测试文件通常包含各种HTTP请求和响应的模拟数据,用于确保异步请求和流式处理功能的正确性。 总之,Java中的HTTP异步请求通过`HttpAsyncClients`和自定义的回调处理类,如`...
我们可以使用 Java 语言来发送 HTTP 请求,并将 Cookie 信息写入到 HTTP 头部中,以便模拟用户的登陆行为。 Java 模拟 Cookie 登陆的实现 下面是一个简单的 Java 模拟 Cookie 登陆的示例代码: ```java import ...
这个“java模拟微信浏览器访问.rar”压缩包中的主要文件是“MonitorWeixinBrowser.java”,我们可以推测这是一个Java程序,用于模拟微信内置浏览器的行为。下面将详细介绍这个主题的相关知识点。 1. **Java HTTP ...
...此方法通常用于向服务器发送数据,例如用户提交的表单信息。 #### 核心知识点 ...从构建HTML表单到使用不同的库来模拟HTTP请求,再到处理表单参数,每一步都需要仔细考虑以确保数据的安全性和准确性。
java墨迹HTTP请求传送图片。其中服务端部分可以另找我下载
在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种基于HTTP协议的安全通信协议,用于在客户端和服务器之间建立安全的、加密的数据传输通道。它主要用于保护用户数据,防止中间人攻击和数据篡改。本...
当我们需要实现文件上传功能时,可以通过模拟HTTP请求来完成。这个过程通常涉及到表单提交、Multipart/form-data编码、HttpClient或者HttpURLConnection类的使用。下面将详细探讨这些知识点。 1. **HTTP POST请求**...
在Android开发中,模拟HTTP请求是一项基础且重要的任务,它允许应用与远程服务器进行数据交互,获取或发送信息。本文将深入探讨如何在Android平台上实现HTTP请求,主要涉及以下几个方面: 1. **HTTP协议基础**:...
"JAVA利用HttpClient进行POST请求(HTTPS)" JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送...
java模拟网络请求,get post put delete四种模式,请求头处理参数处理。此文件仅供大家参考,稍作修改即可。