Tag: http headers

解析原始HTTP请求

我正在研究HTTP流量数据集,它由完整的POST和GET请求组成,如下所示。 我在java中编写了代码,将每个请求分开并将其保存为数组列表中的字符串元素。 现在我很困惑如何在java中解析这些原始HTTP请求有没有比手动解析更好的方法? GET http://localhost:8080/tienda1/imagenes/3.gif/ HTTP/1.1 User-Agent: Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.8 (like Gecko) Pragma: no-cache Cache-control: no-cache Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Encoding: x-gzip, x-deflate, gzip, deflate Accept-Charset: utf-8, utf-8;q=0.5, *;q=0.5 Accept-Language: en Host: localhost:8080 Cookie: JSESSIONID=FB018FFB06011CFABD60D8E8AD58CA21 Connection: close

在Content-Type中指定charset时,Jersey和@FormParam无法正常工作

看起来Jersey 2.0(使用servlet 3.1)在Content-Type标头中指定charset属性时无法解码参数。 例如,考虑以下端点: @POST @Path(“/hello”) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.APPLICATION_JSON) public Response hello(@FormParam(“name”) String name) { System.out.println(name); return ok(); } 此curl请求有效: curl -X POST -H “content-type: application/x-www-form-urlencoded” -d “name=tom” http://localhost:8080/sampleapp/hello 相反,以下请求不起作用, name参数为null : curl -X POST -H “content-type: application/x-www-form-urlencoded; charset=UTF-8” -d “name=tom” http://localhost:8080/sampleapp/hello 我认为内容类型中的charset=UTF-8添加会破坏我的代码。 编辑: 我打开了官方机票以防这是一个错误: https : //java.net/jira/browse/JERSEY-1978

通过Java Socket读取映像文件

这是我到目前为止, Socket clientSocket = new Socket(HOST, PORT); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); InputStream is = socket.getInputStream(); byte[] byteChunk = new byte[1024]; int c = is.read(byteChunk); while (c != -1){ buffer.write(byteChunk, 0, c); c = is.read(byteChunk); } BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(buffer.toByteArray())); 我的代码问题是ImageIO.read()返回null。 当我打印ByteArrayOutputStream对象的内容时,我得到的是标题部分 HTTP/1.1 200 OK Date: Fri, 30 Dec 2011 11:34:19 GMT Server: Apache/2.2.3 […]

替代“Referer”标题

我使用了代码“request.getHeader(”Referer“);” 代码似乎工作正常。 但最近我发现它不能在IE中运行。 IE投掷无效。 我现在对如何前进感到无能为力。 有没有“Referer”标题的替代品可以获得以前的链接并在所有浏览器中正常工作? 从上一个链接设置自定义标题对我来说不是一个可行的选择。 所以有人请帮我解决这个问题。 谢谢。

在Java中,如何在不生成String对象的情况下从HttpServletRequest标头中提取密码?

处理敏感数据(==密码)的常见Java安全准则建议不要使用String对象来存储数据,而是使用字节或字符数组。 我试图在HttpServlet处理程序中应用此指南。 特别是,我使用类似于基本身份validation的方法,其中凭据在标头中传入(这是一个GET请求,因此没有正文)。 我遇到的问题是,在没有生成String对象的情况下,似乎无法获取头数据,这违反了get-go的准则。 我已经彻底搜索了一个解决方案,但没有找到任何相关的讨论。 有没有人对此问题有任何见解? 注意:这是通过HTTPS进行的,因此这里没有连接安全问题。

如何从http或https请求获取带端口的主机名

我在jboss容器中部署了两个应用程序(相同的unix框)。 如果我从app1收到请求,我需要为app2构建相应的请求。 例如: 如果app1请求是: http : //example.com/context? param1 = 123 然后我需要提取“ http://example.com/ ”,以便我可以构建第二个应用程序的请求。 我试过用: HttpServletRequest.getServerName() & HttpServletRequest.getServerPort() & \ HttpServletRequest.getHeader(“host”) 方法,但请求可能是http或https。 如果还有其他更好的方法,请告诉我。 谢谢!

Java URLConnection:如何找出Web文件的大小?

我正在为学校做一个项目,我正在实现一个可以用来从网上下载文件的工具(有一个限制选项)。 问题是,我将有一个GUI,我将使用JProgressBar小部件,我想显示下载的当前进度。 为此,我需要知道文件的大小。 如何在下载文件之前获取文件的大小。

HTTP标头中的非法字符

我正在创建一个HttpUrlConnection ,需要设置多个自定义标头。 我想按照以下方式做一些事情,但标题映射的内容需要来自单个字符串。 在HTTP标头名称和HTTP标头值中是否存在任何非法或极少使用的字符? HashMap headers = new HashMap(); // TODO: How can I fill the headers map reliably from a single string? HttpURLConnection c = (HttpURLConnection) url.openConnection(); for(Map.Entry e : headers.entrySet()) c.setRequestProperty(e.getKey(), e.getValue()); 解决方案现在 似乎任何HTTP标头名称都不包含任何空格(通常使用破折号?),因此我可以使用单个空格将名称与值分开。 至于名称 – 值集,似乎我搞砸了,因为根据给定的答案,值可以包含几乎任何东西。 所以我刚刚选择了一个我很确定永远不会被使用的角色: § 。 如果事实certificate它确实需要,我只需要调整我的代码:p Header1 Value1§Header2 Value2§Header3 Header3

如何修改HttpUrlConnection的标头

我试图改进Java Html文档,但我遇到了HttpUrlConntion问题。 有一件事是,如果用户代理是Java VM,某些服务器会阻止请求。 另一个问题是HttpUrlConnection没有设置Referrer或Location头字段。 由于几个站点使用这些字段来validation内容是从他们自己的站点访问的,因此我也在此处被阻止。 据我所知,唯一的解决方案是替换HTTP协议的URL处理程序。 或者有没有办法修改默认的HTTP Handler?