V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OBoOrange
V2EX  ›  Java

如何解决 Java 构造 HTTP 请求 POST 的返回值是乱码

  •  1
     
  •   OBoOrange · 2015-04-08 16:34:35 +08:00 · 5260 次点击
    这是一个创建于 3516 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我尝试 zimuzu.tv 的登陆,post表单,收到的返回值是一堆奇怪的东西
    代码:


    比如:
    11 条回复    2015-05-08 16:00:43 +08:00
    aliuwr
        1
    aliuwr  
       2015-04-08 16:54:04 +08:00   ❤️ 1
    返回的内容是压缩过的,去掉 15 行就好了。
    aaaa007cn
        2
    aaaa007cn  
       2015-04-08 16:55:05 +08:00   ❤️ 1
    conn.setRequestProperty("Accept-Encoding", "gzip, deflate");

    看看服务器返回的 http header 中是否指定了 Content-Encoding 头
    fising
        3
    fising  
       2015-04-08 16:56:07 +08:00   ❤️ 1
    两个办法:
    1. 请求头去掉 gzip
    2. 返回的内容 gzip_decode
    OBoOrange
        4
    OBoOrange  
    OP
       2015-04-08 17:12:59 +08:00
    @aliuwr 十分感谢~
    OBoOrange
        5
    OBoOrange  
    OP
       2015-04-08 17:13:33 +08:00
    @aaaa007cn 是这样的,tks
    zhangchioulin
        6
    zhangchioulin  
       2015-04-08 17:17:42 +08:00
    jsp吗?我记得我们是,添加一个类文件,然后改了配置
    OBoOrange
        8
    OBoOrange  
    OP
       2015-04-09 22:57:19 +08:00   ❤️ 1
    @zhangchioulin 嗯,都弄好了,我的问题是“Accept-Encoding”造成的

    补充一个,就是如果返回值中如果有中文的话,上面代码的26行改为:BufferedReader buffer = new BufferedReader(new InputStreamReader(in, "UTF-8"));

    使用UTF-8编码就行了
    OBoOrange
        9
    OBoOrange  
    OP
       2015-04-11 13:17:05 +08:00
    @aaaa007cn 你好,麻烦了,我还想请教一个问题~~

    1.post账号和密码登陆一个网址( www.zuimadai.com )。通过服务器返回的Set-Cookie获得cookie的值。
    2.打开新网页,在构造的请求中加上这个cookie的name-value对,来再这个网站发送心情

    服务器返回405,是不是方法错了?

    以下是抓包和代码
    通过抓包,第二步中我打开的网页是:www.zuidaima.com/mood/create.htm

    通过上面抓包信息,我构造的请求如下:
    https://gist.github.com/anonymous/1ac552bb22b542de104d
    OBoOrange
        10
    OBoOrange  
    OP
       2015-04-11 13:23:31 +08:00
    @aaaa007cn 抱歉上面的代码少了信息输出的4行代码。

    //要发送的内容(就像抓包那样看到的)
    String BOUNDARY = "------WebKitFormBoundaryfV9cW5irwPumXS5m\r\n";
    String newSend = BOUNDARY + "Content-Disposition: form-data; name=\"content\"\r\n\r\n";
    newSend += "my test" + BOUNDARY;
    newSend += "Content-Disposition: form-data; name=\"file\"; filename=\"\"\r\n";
    newSend += "Content-Type: application/octet-stream";
    newSend += "------WebKitFormBoundaryfV9cW5irwPumXS5m--\r\n";

    //上面那部分接下面的这四行代码
    DataOutputStream newOut = new DataOutputStream(newConn.getOutputStream());
    newOut.write(send.getBytes());
    newOut.flush();
    newOut.close();

    十分感谢
    zonghua
        11
    zonghua  
       2015-05-08 16:00:43 +08:00 via iPhone
    @OBoOrange 请教一下怎么封装类,我用来模拟登录教务系统,里面有很多隐藏表单
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2534 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:47 · PVG 09:47 · LAX 17:47 · JFK 20:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.