Java HttpURLConnection | POST方法| HTTP标头字段的序列

 百变精灵110 发布于 2023-02-08 00:54

我试图使用java.net.HttpURLConnection在Java中"欺骗"Firefox HTTP POST请求.我使用Wireshark检查发送的HTTP头,因此我(希望)有可靠的信息源,为什么Java结果与理想情况不匹配(使用Firefox).

我已将所有标题字段完全设置为Firefox通过HTTP发送的值,并注意到标题字段的顺序不同.Firefox的输出如下:

POST ...
**Host**
User-Agent
Accept
Accept-Language
Accept-Encoding
Referer
Connection
Content-Type
Content-Length

当我让wireshark在Java中点击我的实现时,它给了我一个稍微不同的字段序列:

POST...
**User-Agent**
Accept
Accept-Language
Accept-Encoding
Referer
Content-Type
Host
Connection
Content-Length

所以基本上,我有所有的领域,只是以不同的顺序.我也注意到,在主机领域与不同的值发送: www.thewebsite.com(火狐)<---> thewebsite.com(Java的HttpURLConnection类),虽然我传递的字符串,以httpUrlConnection.setRequestProperty"WWW".

我还没有分析Wireshark的字节输出,但我知道服务器Location在我的响应的头字段中没有返回相同的内容.

我的问题是:

(1)是否可以控制请求中的头字段的顺序,如果是,是否可以使用HttpURLConnection?如果没有,是否可以使用Java直接控制HTTP头中的字节?[我不拥有服务器,所以我唯一的希望让POST方法正常工作是通过我的应用程序假装是Firefox,服务器并不是真的很冗长,我唯一的信息是:Apache with PHP]

(2)有没有办法修复上面描述的setRequestProperty()问题("www")?

(3)还有什么可以重要的?(我需要关注底层,TCP ......?)

谢谢你的评论.

PS.我试图模拟一个没有发送cookie的情况,这样我就可以忽略这个效果了.

1 个回答
  • 首先,标题的顺序无关紧要.

    其次,为了手动覆盖host标题,您需要sun.net.http.allowRestrictedHeaders=true在代码中设置

    System.setProperty("sun.net.http.allowRestrictedHeaders", "true")
    

    或者在JVM启动时

    -Dsun.net.http.allowRestrictedHeaders=true
    

    这是Oracle不久前提出的一项安全预防措施.那是因为根据RFC

    Host request-header字段指定所请求资源的Internet主机和端口号,这是从用户或引用资源(通常是HTTP URL)给出的原始URI获得的.

    2023-02-08 01:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有