第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

URLConnection不遵循重定向

URLConnection不遵循重定向

有只小跳蛙 2019-07-10 16:48:08
URLConnection不遵循重定向我不明白為什么JavaHttpURLConnection不會(huì)跟隨重定向。我使用以下代碼來(lái)獲取本頁(yè):import java.net.URL;import java.net.HttpURLConnection;import java.io.InputStream;public class Tester {     public static void main(String argv[]) throws Exception{         InputStream is = null;         try {             String bitlyUrl = "http://bit.ly/4hW294";             URL resourceUrl = new URL(bitlyUrl);             HttpURLConnection conn = (HttpURLConnection)resourceUrl.openConnection();             conn.setConnectTimeout(15000);             conn.setReadTimeout(15000);             conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.11)              Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)");             conn.connect();             is = conn.getInputStream();             String res = conn.getURL().toString();             if (res.toLowerCase().contains("bit.ly"))                 System.out.println("bit.ly is after resolving: "+res);        }        catch (Exception e) {            System.out.println("error happened: "+e.toString());        }        finally {             if (is != null) is.close();          }     }}此外,我得到了以下答復(fù)(這似乎是完全正確的!):GET /4hW294 HTTP/1.1Host: bit.lyConnection: Keep-AliveUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru-RU; rv:1.9.1.3)  Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729)HTTP/1.1 301 MovedServer: nginx/0.7.42Date: Thu, 10 Dec 2009 20:28:44 GMTContent-Type:   text/html; charset=utf-8Connection: keep-aliveLocation: https://www.myganocafe.com/CafeMacyMIME-Version: 1.0Content-Length: 297不幸的是,res變量包含相同的URL,流包含以下內(nèi)容(顯然,Java的HttpURLConnection不跟隨重定向!):<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>Moved</TITLE></HEAD><BODY><H2>Moved</H2> <A HREF="https://www.myganocafe.com/CafeMacy">The requested URL has moved here.</A><P ALIGN=RIGHT><SMALL> <I>AOLserver/4.5.1 on http://127.0.0.1:7400</I></SMALL></P></BODY></HTML>
查看完整描述

3 回答

?
蠱毒傳說(shuō)

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

我不認(rèn)為它會(huì)自動(dòng)地從HTTP重定向到HTTPS(反之亦然)。

盡管我們知道HTTPS反映了HTTP,但從HTTP協(xié)議的角度來(lái)看,HTTPS只是其他一些完全不同的未知協(xié)議。在沒(méi)有用戶批準(zhǔn)的情況下遵循重定向是不安全的。

例如,假設(shè)應(yīng)用程序被設(shè)置為自動(dòng)執(zhí)行客戶端身份驗(yàn)證。用戶希望匿名瀏覽,因?yàn)樗褂玫氖荋TTP。但是,如果他的客戶不經(jīng)詢問(wèn)就跟蹤HTTPS,那么他的身份就會(huì)透露給服務(wù)器。


查看完整回答
反對(duì) 回復(fù) 2019-07-10
?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

HttpURL連接設(shè)計(jì)不會(huì)自動(dòng)從HTTP重定向到HTTPS(反之亦然)。跟蹤重定向可能會(huì)造成嚴(yán)重的安全后果。SSL(因此HTTPS)創(chuàng)建了一個(gè)對(duì)用戶是唯一的會(huì)話。此會(huì)話可用于多個(gè)請(qǐng)求。因此,服務(wù)器可以跟蹤來(lái)自單個(gè)人的所有請(qǐng)求。這是一種脆弱的身份形式,是可以利用的。此外,SSL握手可以請(qǐng)求客戶端的證書(shū)。如果發(fā)送到服務(wù)器,則將客戶端的標(biāo)識(shí)交給服務(wù)器。

埃里克森指出,假設(shè)應(yīng)用程序被設(shè)置為自動(dòng)執(zhí)行客戶端身份驗(yàn)證。用戶希望匿名瀏覽,因?yàn)樗褂玫氖荋TTP。但是,如果他的客戶不經(jīng)詢問(wèn)就跟蹤HTTPS,那么他的身份就會(huì)透露給服務(wù)器。

程序員必須采取額外步驟,確保在從HTTP重定向到HTTPS之前不會(huì)發(fā)送憑據(jù)、客戶端證書(shū)或SSL會(huì)話id。默認(rèn)情況是發(fā)送這些。如果重定向傷害了用戶,請(qǐng)不要遵循重定向。這就是為什么不支持自動(dòng)重定向。

有了這個(gè)理解,下面是重定向之后的代碼。

  URL resourceUrl, base, next;
  Map<String, Integer> visited;
  HttpURLConnection conn;
  String location;
  int times;

  ...
  visited = new HashMap<>();

  while (true)
  {
     times = visited.compute(url, (key, count) -> count == null ? 1 : count + 1);

     if (times > 3)
        throw new IOException("Stuck in redirect loop");

     resourceUrl = new URL(url);
     conn        = (HttpURLConnection) resourceUrl.openConnection();

     conn.setConnectTimeout(15000);
     conn.setReadTimeout(15000);
     conn.setInstanceFollowRedirects(false);   // Make the logic below easier to detect redirections
     conn.setRequestProperty("User-Agent", "Mozilla/5.0...");

     switch (conn.getResponseCode())
     {
        case HttpURLConnection.HTTP_MOVED_PERM:
        case HttpURLConnection.HTTP_MOVED_TEMP:
           location = conn.getHeaderField("Location");
           location = URLDecoder.decode(location, "UTF-8");
           base     = new URL(url);               
           next     = new URL(base, location);  // Deal with relative URLs
           url      = next.toExternalForm();
           continue;
     }

     break;
  }

  is = conn.openStream();
  ...


查看完整回答
反對(duì) 回復(fù) 2019-07-10
?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

有一種叫HttpURLConnection.setFollowRedirects(false)有可能嗎?

你可以隨時(shí)打電話

conn.setInstanceFollowRedirects(true);

如果你想確保你不影響應(yīng)用的其他行為。


查看完整回答
反對(duì) 回復(fù) 2019-07-10
  • 3 回答
  • 0 關(guān)注
  • 923 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)