GVKun编程网logo

JAVA-WEB-HttpRequest

1

本文的目的是介绍JAVA-WEB-HttpRequest的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于asp.net–HttpRequest,HttpWebReques

本文的目的是介绍JAVA-WEB-HttpRequest的详细情况,我们将通过专业的研究、有关数据的分析等多种方式,同时也不会遗漏关于asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别、C# httpRequest Soap请求、C# HttpRequest 请求、c# – 通过HttpClient发布文件时,HttpRequest.Files为空的知识。

本文目录一览:

JAVA-WEB-HttpRequest

JAVA-WEB-HttpRequest

        HttpServletRequest

 

HttpServletRequest概述

我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response

 

service方法中的request的类型是ServletRequest,而doGet/doPost方法的request的类型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加强大,今天我们学习HttpServletRequest。

 

request的运行流程

 

 

通过抓包工具抓取Http请求

 

 

因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行,请 求头和请求体

 

通过request获得请求行

获得客户端的请求方式:String getMethod()

获得请求的资源:

String getRequestURI()

StringBuffer getRequestURL()

String getContextPath() ---web应用的名称

String getQueryString() ---- get提交url地址后的参数字符串

username=zhangsan&password=123

 

注意:request获得客户机(客户端)的一些信息

request.getRemoteAddr() --- 获得访问的客户端IP地址

 

通过request获得请求头

long getDateHeader(String name)

String getHeader(String name)

Enumeration getHeaderNames()

Enumeration getHeaders(String name)

int getIntHeader(String name)

 

referer头的作用:执行该此访问的的来源

做防盗链

 

通过request获得请求体

请求体中的内容是通过post提交的请求参数,格式是:

username=zhangsan&password=123&hobby=football&hobby=basketball

key ---------------------- value

username                    [zhangsan]

password                    [123]

hobby                         [football,basketball]

               

以上面参数为例,通过一下方法获得请求参数:

String getParameter(String name)

String[] getParameterValues(String name)

Enumeration getParameterNames()

Map<String,String[]> getParameterMap()

      注意:get请求方式的请求参数 上述的方法一样可以获得

 

      解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

      解决get提交的方式的乱码:

            parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

 

request的其他功能

 

(1)request是一个域对象

 

request对象也是一个存储数据的区域对象,所以也具有如下方法:

 

setAttribute(String name, Object o)

 

getAttribute(String name)

 

removeAttribute(String name)

 

 

 

注意:request域的作用范围:一次请求中

 

(2)request完成请求转发

 

获得请求转发器----path是转发的地址

 

RequestDispatcher getRequestDispatcher(String path)

 

通过转发器对象转发

 

requestDispathcer.forward(ServletRequest request, ServletResponse response

            

 

注意:ServletContext域与Request域的生命周期比较?

 

   ServletContext

 

   创建:服务器启动

 

   销毁:服务器关闭

 

   域的作用范围:整个web应用

 

   request

 

   创建:访问时创建request

 

   销毁:响应结束request销毁

 

   域的作用范围:一次请求中

 

       注意:转发与重定向的区别?

 

          1)重定向两次请求,转发一次请求

 

          2)重定向地址栏的地址变化,转发地址不变

 

          3)重新定向可以访问外部网站 转发只能访问内部资源

 

          4)转发的性能要优于重定向

 

       注意:客户端地址与服务器端地址的写法?

 

          客户端地址:

 

         是客户端去访问服务器的地址,服务器外部的地址,特点:写上web应用名    

 

         直接输入地址:

 

         重定向

 

      服务器端地址:

 

      服务器内部资源的跳转的地址,特点:不需要写web应用的名称

 

      转发

 

总结:

 

request获得行的内容

 

       request.getMethod()

 

       request.getRequestURI()

 

       request.getRequestURL()

 

       request.getContextPath()

 

       request.getRemoteAddr()

 

request获得头的内容

 

       request.getHeader(name)

 

request获得体(请求参数)

 

       String request.getParameter(name)

 

       Map<String,String[]> request.getParameterMap();

 

       String[] request.getParameterValues(name);

 

       注意:客户端发送的参数 到服务器端都是字符串

 

       获得中文乱码的解决:

 

          post:request.setCharacterEncoding(“UTF-8”);

 

          get:

 

parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);

 

request转发和域

 

request.getRequestDispatcher(转发的地址).forward(req,resp);

 

request.setAttribute(name,value)

 

request.getAttribute(name)

 

 

 

asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别

asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别

我想知道有没有人解释上市的差异

解决方法

他们做不同的事情

WebRequest是HttpWebRequest的抽象基类 – 您不能直接使用它。它是其他*请求类的基类(用于FTP,文件和其他类型的Web请求)。这些类都用于从Web获取资源(文件)。

还有一个WebClient类 – 可能是使用所有用于从Internet检索资源的BCL类最简单的类。

另一方面,HttpRequest表示ASP.NET应用程序中资源的请求 – 这是请求的服务器端。

主要的区别是HttpWebRequest是HTTP客户端,HttpRequest是在ASP.NET Web应用程序中使用的服务器端。

C# httpRequest Soap请求

C# httpRequest Soap请求

一般添加web服务引用是.NET用代理类模式 创建SOAP请求代理类,代理类是.NET开发工具VS自动给你生成。

下面用一般HTTP的模式有时候可能更合适,原理是构造SOAP请求的XML后POST过去:

下面是HelloWorld的例子

private void button1_Click(object sender, EventArgs e)
        {

            //创建HttpWebRequest 实例,使用WebRequest.Create
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:1198/WebSite1/Service.asmx");
            //发送请求
            webRequest.Method = "POST";
            //编码
            webRequest.ContentType = "text/xml";
            string soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
            soap += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
            soap += " <soap:Header>";
            soap += " </soap:Header>";
            soap += "<soap:Body>";
            soap += "  <HelloWorld xmlns=\"http://tempuri.org/\" />";
            soap += "</soap:Body>";
            soap += "</soap:Envelope>";
          // webRequest.Headers["SoapAction"] = "http://localhost:1198/WebSite1/Service.asmx";

            //字符转字节
            byte[] bytes = Encoding.UTF8.GetBytes(soap);
            Stream writer = webRequest.GetRequestStream();
            writer.Write(bytes, 0, bytes.Length);
            writer.Flush();
            writer.Close();
            string result = "";
            //返回 HttpWebResponse
            try
            {
                HttpWebResponse hwRes = webRequest.GetResponse() as HttpWebResponse;
                if (hwRes.StatusCode == System.Net.HttpStatusCode.OK)
                {//是否返回成功
                    Stream rStream = hwRes.GetResponseStream();
                    //流读取
                    StreamReader sr = new StreamReader(rStream, Encoding.UTF8);
                    result = sr.ReadToEnd();
                    sr.Close();
                    rStream.Close();
                }
                else
                {
                    result = "连接错误";
                }
                //关闭
                hwRes.Close();
                txtResponse.Text = result;
            }
            catch (System.Net.WebException ex)
            {
                String responseFromServer = ex.Message.ToString() + " ";
                if (ex.Response != null)
                {
                    using (WebResponse response = ex.Response)
                    {
                        Stream data = response.GetResponseStream();
                        using (StreamReader reader = new StreamReader(data))
                        {
                            responseFromServer += reader.ReadToEnd();
                        }
                    }
                }
                txtResponse.Text = responseFromServer;
            }


        }

  

 

不错意外会返回如下:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><HelloWorldResponse xmlns="http://tempuri.org/"><HelloWorldResult>Hello World</HelloWorldResult></HelloWorldResponse></soap:Body></soap:Envelope>

  

 不构造XML结构请求也是可以的:

/*
             /*POST /WebSite1/Service.asmx/HelloWorld HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length
             */
            //创建HttpWebRequest 实例,使用WebRequest.Create
            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:1198/WebSite1/Service.asmx/HelloWorld");
            //发送请求
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            webRequest.ContentLength=0;
            string soap = "";//请求参数如 soap = "str=wgscd&num=123";
            //字符转字节
            byte[] bytes = Encoding.UTF8.GetBytes(soap);
            Stream writer = webRequest.GetRequestStream();
            writer.Write(bytes, 0, bytes.Length);
            writer.Flush();
            writer.Close();
            string result = "";
            //返回 HttpWebResponse
            try
            {
                HttpWebResponse hwRes = webRequest.GetResponse() as HttpWebResponse;
                if (hwRes.StatusCode == System.Net.HttpStatusCode.OK)
                {//是否返回成功
                    Stream rStream = hwRes.GetResponseStream();
                    //流读取
                    StreamReader sr = new StreamReader(rStream, Encoding.UTF8);
                    result = sr.ReadToEnd();
                    sr.Close();
                    rStream.Close();
                }
                else
                {
                    result = "连接错误";
                }
                //关闭
                hwRes.Close();
                txtResponse.Text = result;
            }
            catch (Exception ex)
            {
                txtResponse.Text = ex.Message ;
               
            }

  

会返回:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">Hello World</string>

  

 不构造XML请求结构的一个死穴是,那种传人参数是某个对象/类的情况就GG了。

如:

[WebMethod]
public DataRet HelloWorld(DataRequest dt)
{

DataRet d =new DataRet();
return d;
}

 

C# HttpRequest 请求

C# HttpRequest 请求

public static string Post(string Url,string postDataStr,string cookies)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            if (cookies != null)
                request.Headers.Add("Cookie",cookies);
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = postDataStr.Length;
            StreamWriter writer = new StreamWriter(request.GetRequestStream(),Encoding.ASCII);
            writer.Write(postDataStr);
            writer.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            string encoding = response.ContentEncoding;
            if (encoding == null || encoding.Length < 1)
            {
                encoding = "UTF-8"; //默认编码  
            }
            StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.GetEncoding(encoding));
            string retString = reader.ReadToEnd();
            return retString;
        }

        public static string Get(string Url,string cookies)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "GET";
            if (cookies != null)
                request.Headers.Add("Cookie",cookies);
            request.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            string encoding = response.ContentEncoding;
            if (encoding == null || encoding.Length < 1)
            {
                encoding = "UTF-8"; //默认编码  
            }
            StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.GetEncoding(encoding));
            string retString = reader.ReadToEnd();
            return retString;
        }

c# – 通过HttpClient发布文件时,HttpRequest.Files为空

c# – 通过HttpClient发布文件时,HttpRequest.Files为空

服务器端:
public HttpResponseMessage Post([FromUri]string machineName)
    {
        HttpResponseMessage result = null;
        var httpRequest = HttpContext.Current.Request;

        if (httpRequest.Files.Count > 0 && !String.IsNullOrEmpty(machineName))
        ...

客户端:

public static void PostFile(string url,string filePath)
    {
        if (String.IsNullOrWhiteSpace(url) || String.IsNullOrWhiteSpace(filePath))
            throw new ArgumentNullException();

        if (!File.Exists(filePath))
            throw new FileNotFoundException();

        using (var handler = new httpclienthandler { Credentials=  new NetworkCredential(AppData.UserName,AppData.Password,AppCore.Domain) })
        using (var client = new HttpClient(handler))
        using (var content = new MultipartFormDataContent())
        using (var ms = new MemoryStream(File.ReadAllBytes(filePath)))
        {
            var fileContent = new StreamContent(ms);
            fileContent.Headers.Contentdisposition = new ContentdispositionHeaderValue("attachment")
            {
                FileName = Path.GetFileName(filePath)
            };
            content.Add(fileContent);
            content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

            var result = client.PostAsync(url,content).Result;
            result.EnsureSuccessstatusCode();
        }
    }

在服务器端,httpRequest.Files集合始终为空.但标题(内容长度等)是正确的.

解决方法

您不应该使用HttpContext来获取ASP.NET Web API中的文件.看看这个由微软( http://code.msdn.microsoft.com/ASPNET-Web-API-File-Upload-a8c0fb0d/sourcecode?fileId=67087&pathId=565875642)编写的例子.
public class UploadController : ApiController 
{ 
    public async Task<HttpResponseMessage> PostFile() 
    { 
        // Check if the request contains multipart/form-data. 
        if (!Request.Content.IsMimeMultipartContent()) 
        { 
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
        } 

        string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
        var provider = new MultipartFormDataStreamProvider(root); 

        try 
        { 
            StringBuilder sb = new StringBuilder(); // Holds the response body 

            // Read the form data and return an async task. 
            await Request.Content.ReadAsMultipartAsync(provider); 

            // This illustrates how to get the form data. 
            foreach (var key in provider.FormData.AllKeys) 
            { 
                foreach (var val in provider.FormData.GetValues(key)) 
                { 
                    sb.Append(string.Format("{0}: {1}\n",key,val)); 
                } 
            } 

            // This illustrates how to get the file names for uploaded files. 
            foreach (var file in provider.FileData) 
            { 
                FileInfo fileInfo = new FileInfo(file.LocalFileName); 
                sb.Append(string.Format("Uploaded file: {0} ({1} bytes)\n",fileInfo.Name,fileInfo.Length)); 
            } 
            return new HttpResponseMessage() 
            { 
                Content = new StringContent(sb.ToString()) 
            }; 
        } 
        catch (System.Exception e) 
        { 
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError,e); 
        } 
    } 

}

今天关于JAVA-WEB-HttpRequest的讲解已经结束,谢谢您的阅读,如果想了解更多关于asp.net – HttpRequest,HttpWebRequest和WebRequest之间的区别、C# httpRequest Soap请求、C# HttpRequest 请求、c# – 通过HttpClient发布文件时,HttpRequest.Files为空的相关知识,请在本站搜索。

本文标签: