如何java 截取http请求求

如何截取Http请求
如何截取Http请求
&& &本篇文章比较短,主要是因为我的一个随想产生的一段代码。 这段代码的功能你可以叫做是简单的Http服务器也可以叫做Http请求截取。它实现的功能就是截取Http请求然后自己做处理。
public class HttpServer : IDisposable
private HttpL
public void Start()
listener = new HttpListener();
listener.Prefixes.Add(&http://localhost/&);
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication | AuthenticationSchemes.A
listener.Start();
listener.BeginGetContext(GetContext, null);
private void GetContext(IAsyncResult ar)
HttpListenerRequest R
HttpListenerResponse R
HttpListenerContext ctx = listener.EndGetContext(ar);
Request = ctx.R
Response = ctx.R
//setup waiting for the next request
listener.BeginGetContext(GetContext, null);
catch (InvalidOperationException)
catch (HttpListenerException)
var sw = new StreamWriter(Response.OutputStream);
sw.Write(@&&html&&body&&p&你的请求已经被截取&/p&&/body&&/html&&);
sw.Flush();
Response.OutputStream.Flush();
Response.Close();
public void Dispose()
if (listener != null)
listener.Stop();
3:简单解释一下
&& &代码的核心就是HttpListener,通过它去侦听一个端口,当有请求的时候BeginGetContext交给GetContext方法进行异步处理,在这个方法的内部首先实现的就是重新监听。然后进行自己的处理。
我的热门文章
即使是一小步也想与你分享通过HTTP请求获取RabbitMQ队列消息的方法 - 简书
通过HTTP请求获取RabbitMQ队列消息的方法
由于自动化测试的需要,现在要用一种简单的方法可以获取并验证RabbitMQ中的消息,而不是费劲通过程序再写一个消费者。其实,RabbitMQ提供了HTTP API,可以帮助我们实现这个需求。在浏览器上打开并登陆RabbitMQ后,在页面的最下方我们就可以看到介绍“HTTP API”的链接入口,
点击打开,就可以看到关于RabbitMQ Management HTTP API的介绍:
很棒的是里面包含了足够详细的例子,话不多少,直接找到我们想获取队列里消息的API:
恩,说实话,其实讲的比较清楚了,但是如果有实际的请求来做对比就更好了。好,我们就制作一个请求来对照下:1. 点击Queues:
2. 找到自己的Quese name,点击,可以看到这个页面:
好,打开控制台(F12),点击“Get Messages”按钮,可以获得这个请求的详细信息,包括Header和参数:
这样,再辅以刚才看到的文档,我们就可以方便的通过HTTP获得队列的消息啦!PHP实现取得HTTP请求的原文
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了PHP实现取得HTTP请求的原文,需要的朋友可以参考下
本文实例讲述了PHP实现取得HTTP请求的原文的方法,具体步骤如下:
1. 取得请求行:Method、URI、协议
可以从超级变量$_SERVER中获得,三个变量的值如下:
$_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."\r\n";
2. 取得所有Header
PHP有个内置函数getallheader(),是apache_request_headers()函数的一个别名,可以将HTTP请求的所有Header以数组形式返回。但这个函数只能工作在Apache下,如果换了Nginx或者命令行,会直接报函数不存在的错误。
比较通用的方法是,从超级变量$_SERVER中提取出来,有关Header的键值都是“HTTP_”开头的,可以根据此特点取得所有的Header。
具体代码如下:
function get_all_headers() {
$headers = array();
foreach($_SERVER as $key =& $value) {
if(substr($key, 0, 5) === 'HTTP_') {
$key = substr($key, 5);
$key = strtolower($key);
$key = str_replace('_', ' ', $key);
$key = ucwords($key);
$key = str_replace(' ', '-', $key);
$headers[$key] = $
3. 取得Body
官方提供了一种获取请求Body的方法,即:
file_get_contents('php://input')
4. 最终完整代码如下:
* 获取HTTP请求原文
* @return string
function get_http_raw() {
$raw = '';
// (1) 请求行
$raw .= $_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."\r\n";
// (2) 请求Headers
foreach($_SERVER as $key =& $value) {
if(substr($key, 0, 5) === 'HTTP_') {
$key = substr($key, 5);
$key = str_replace('_', '-', $key);
$raw .= $key.': '.$value."\r\n";
// (3) 空行
$raw .= "\r\n";
// (4) 请求Body
$raw .= file_get_contents('php://input');
感兴趣的读者可以调试一下本文所述实例,以加深理解。相信对大家的PHP程序设计有一定的帮助作用。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 http请求 截取 串改 的文章

 

随机推荐