久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

獲取原始 HTTP 響應標頭

Getting raw HTTP response headers(獲取原始 HTTP 響應標頭)
本文介紹了獲取原始 HTTP 響應標頭的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

有沒有辦法獲取原始響應 http 標頭?

getHeaderField() 方法對我不起作用,因為服務器吐出多個Set-Cookie",其中一些會丟失.

解決方案

getHeaderField() 方法對我不起作用

您是在 <代碼>java.net.URLConnection,是嗎?不,使用 URLconnection 無法獲取原始 HTTP 響應標頭.您需要退回到低級別的 Socket 編程.這是一個SSCCE,只需復制'n'paste'n'運行它.

包com.stackoverflow.q2307291;導入 java.io.BufferedReader;導入 java.io.IOException;導入 java.io.InputStreamReader;導入 java.io.OutputStreamWriter;導入 java.io.PrintWriter;導入 java.net.Socket;公共類測試{公共靜態(tài) void main(String[] args) 拋出 IOException {字符串主機名 = stackoverflow.com";國際端口 = 80;套接字套接字 = null;PrintWriter 作家 = null;BufferedReader 閱讀器 = null;嘗試 {套接字 = 新套接字(主機名,端口);writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));writer.println("GET/HTTP/1.1");writer.println("主機:" + 主機名);writer.println("接受:*/*");writer.println("用戶代理:Java");//說實話.writer.println("");//重要,否則服務器會期望請求中包含更多內容.writer.flush();reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));for (String line; (line = reader.readLine()) != null;) {if (line.isEmpty()) 中斷;//當標題完成時停止.我們對所有的 HTML 不感興趣.System.out.println(line);}} 最后 {if (reader != null) try { reader.close();} 捕捉(IOException logOrIgnore){}if (writer != null) { writer.close();}if (socket != null) try { socket.close();} 捕捉(IOException logOrIgnore){}}}}

為避免每個嘗試此代碼段的人都使 SO 過載,輸出如下所示:

<上一頁>HTTP/1.1 200 正常緩存控制:私有內容類型:文本/html;字符集=utf-8過期:2010 年 2 月 21 日星期日 20:39:08 GMT服務器:Microsoft-IIS/7.5日期:2010 年 2 月 21 日星期日 20:39:07 GMT連接:關閉內容長度:208969

要了解有關以低級方式發(fā)送 HTTP 請求的更多信息,請閱讀 HTTP 規(guī)范.

但是,您可能想使用 getHeaderFields() 方法來檢索具有多個值的標頭.<代碼>getHeaderField() 即只返回最后一個值,根據鏈接的 API 文檔.

列表<字符串>cookies = connection.getHeaderFields().get("Set-Cookie");

Is there any way to get raw response http header?

The getHeaderField() method doesn't work for me, because server spits multiple 'Set-Cookie' and some of them get lost.

解決方案

The getHeaderField() method doesn't work for me

You're asking this in the context of java.net.URLConnection, is it? No, obtaining the raw HTTP response headers is not possible with URLconnection. You'll need to fall back to low-level Socket programming. Here's an SSCCE, just copy'n'paste'n'run it.

package com.stackoverflow.q2307291;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class Test {

    public static void main(String[] args) throws IOException {
        String hostname = "stackoverflow.com";
        int port = 80;

        Socket socket = null;
        PrintWriter writer = null;
        BufferedReader reader = null;

        try {
            socket = new Socket(hostname, port);
            writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            writer.println("GET / HTTP/1.1");
            writer.println("Host: " + hostname);
            writer.println("Accept: */*");
            writer.println("User-Agent: Java"); // Be honest.
            writer.println(""); // Important, else the server will expect that there's more into the request.
            writer.flush();

            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            for (String line; (line = reader.readLine()) != null;) {
                if (line.isEmpty()) break; // Stop when headers are completed. We're not interested in all the HTML.
                System.out.println(line);
            }
        } finally {
            if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} 
            if (writer != null) { writer.close(); }
            if (socket != null) try { socket.close(); } catch (IOException logOrIgnore) {} 
        }
    }

}

To avoid SO being overloaded by everyone trying this snippet, here's how the output will look like:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Expires: Sun, 21 Feb 2010 20:39:08 GMT
Server: Microsoft-IIS/7.5
Date: Sun, 21 Feb 2010 20:39:07 GMT
Connection: close
Content-Length: 208969

To learn more about sending HTTP requests the low-level way, read the HTTP specification.

However, you probably want to make use of getHeaderFields() method instead to retrieve a header with multiple values. The getHeaderField() namely only returns the last value, as per the linked API doc.

List<String> cookies = connection.getHeaderFields().get("Set-Cookie");

這篇關于獲取原始 HTTP 響應標頭的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯(lián)網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯(lián)系我們刪除處理,感謝您的支持!

相關文檔推薦

Parsing an ISO 8601 string local date-time as if in UTC(解析 ISO 8601 字符串本地日期時間,就像在 UTC 中一樣)
How to convert Gregorian string to Gregorian Calendar?(如何將公歷字符串轉換為公歷?)
Java: What/where are the maximum and minimum values of a GregorianCalendar?(Java:GregorianCalendar 的最大值和最小值是什么/在哪里?)
Calendar to Date conversion for dates before 15 Oct 1582. Gregorian to Julian calendar switch(1582 年 10 月 15 日之前日期的日歷到日期轉換.公歷到儒略歷切換)
java Calendar setFirstDayOfWeek not working(java日歷setFirstDayOfWeek不起作用)
Java: getting current Day of the Week value(Java:獲取當前星期幾的值)
主站蜘蛛池模板: av片免费| 日韩在线观看一区二区三区 | 一区久久| 成人伊人 | 999www视频免费观看 | 久久99精品久久久久 | 91大神在线资源观看无广告 | 懂色中文一区二区三区在线视频 | 国产精品精品久久久 | 伊人色综合久久天天五月婷 | 欧美视频 亚洲视频 | 91av视频在线免费观看 | 天天弄 | 天天爽网站 | 日韩一区二区三区四区五区六区 | www.亚洲精品| 国产欧美精品一区二区色综合朱莉 | 日韩一区精品 | 欧美aaaaaa | 欧美激情精品久久久久久变态 | 在线观看免费毛片 | 久久久久久久久中文字幕 | 在线观看成人 | 欧美成人a∨高清免费观看 欧美日韩中 | 久久黄色精品视频 | 亚洲欧美激情国产综合久久久 | 激情a| 999久久久| 精品一区二区三区在线观看 | 国产黄色大片在线观看 | 国产伦一区二区三区四区 | 日批免费看 | 欧美人成在线视频 | 成人高清在线视频 | 久久综合久| 国产精品视频二区三区 | 超碰精品在线观看 | 91精品久久 | 欧美九九 | 日日日日操 | 日中文字幕在线 |