久久久久久久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;公共類測試{公共靜態 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

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

但是,您可能想使用 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模板網!

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

相關文檔推薦

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:獲取當前星期幾的值)
主站蜘蛛池模板: 国产日韩一区二区三区 | 免费a网站 | 夏同学福利网 | 91人人看| 91精品国产乱码久久蜜臀 | 成人中文字幕在线 | 欧美一区二区三区在线观看视频 | 国产精品亚洲综合 | 天天操操| 欧美日韩高清 | 亚洲精品久久久久久久久久久 | 在线观看中文字幕 | 91视频观看 | 免费看91| 好姑娘影视在线观看高清 | 亚洲 日本 欧美 中文幕 | 国产成人av在线播放 | 欧美成人一区二区三区 | 激情欧美一区二区三区中文字幕 | 欲色av| 手机在线观看av | 中文字幕不卡视频在线观看 | 在线观看日韩精品视频 | 日本黄色片免费在线观看 | 午夜精品久久久久久久久久久久久 | www.888www看片| 国产在线对白 | 欧美一区二区三区视频在线播放 | 中文字幕一区二区三区日韩精品 | 国产精品96久久久久久 | www.日本国产| 亚洲国产一区二区视频 | 成人免费日韩 | 国内自拍偷拍视频 | 黑人巨大精品欧美一区二区免费 | 欧美成人a | 久久久久国产一区二区三区 | 超碰在线免费 | 亚洲欧美高清 | 国产一区二区三区不卡av | 农村妇女毛片精品久久久 |