Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

403 "Please enable cookies." when Request a Special Cloudflare Website #10141

Closed
1 task done
CodingMoeButa opened this issue Dec 7, 2024 · 14 comments
Closed
1 task done
Labels

Comments

@CodingMoeButa
Copy link

Describe the bug

When I access the website using aiohttp, a 403 "Please enable cookies" error occurs. But when I use other clients to access it, it works fine.

To Reproduce

import sys
import asyncio
import aiohttp # ```pip install aiohttp[speedups]``` # https://docs.aiohttp.org/en/stable/index.html#installing-all-speedups-in-one-command

# 版本常量
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0 LightnovelSpider/5' # 客户端用户代理:前部与最新的Edge浏览器保持一致,尾部标记了本程序的版本。
# 环境常量:根据实际环境,可能需要在每次运行前手动变更的常量。
PROXY = 'http://127.0.0.1:7897' # 必填。如果连接到一个代理池,注意检查代理池中各个代理节点的可用性。
COOKIES = '''Hidden for Privacy''' # 必填。需要提供一组COOKIES供会话初始化。

async def fetch(url:str, referer:str=None, callback=lambda*args:None, cb_kwargs:dict=dict()) -> None:
    headers = {
        'User-Agent': USER_AGENT
    }
    async with aiohttp.ClientSession(
        proxy= PROXY,
        cookies= {i.split("=")[0]:i.split("=")[-1] for i in COOKIES.split("; ")},
    ) as session:
        async with session.get(url, headers=headers, ssl=False) as response:
            print(response.status)

async def main():
    await fetch('https://tw.linovelib.com/novel/1.html')
    await asyncio.sleep(1) # https://docs.aiohttp.org/en/stable/client_advanced.html#graceful-shutdown

if __name__ == '__main__':
    # https://github.com/aio-libs/aiodns?tab=readme-ov-file#note-for-windows-users
    # https://github.com/aio-libs/aiodns/issues/86#issuecomment-1674906449
    # https://github.com/nathom/streamrip/issues/729#issuecomment-2388503896
    if sys.platform == 'win32':
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(main())

403

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<title>Attention Required! | Cloudflare</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="https://tw.linovelib.com/cdn-cgi/styles/cf.errors.css" />
<!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" /><![endif]-->
<style>body{margin:0;padding:0}</style>


<!--[if gte IE 10]><!-->
<script>
  if (!navigator.cookieEnabled) {
    window.addEventListener('DOMContentLoaded', function () {
      var cookieEl = document.getElementById('cookie-alert');
      cookieEl.style.display = 'block';
    })
  }
</script>
<!--<![endif]-->


</head>
<body>
  <div id="cf-wrapper">
    <div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div>
    <div id="cf-error-details" class="cf-error-details-wrapper">
      <div class="cf-wrapper cf-header cf-error-overview">
        <h1 data-translate="block_headline">Sorry, you have been blocked</h1>
        <h2 class="cf-subheadline"><span data-translate="unable_to_access">You are unable to access</span> dns01.org</h2>
      </div><!-- /.header -->

      <div class="cf-section cf-highlight">
        <div class="cf-wrapper">
          <div class="cf-screenshot-container cf-screenshot-full">
            
              <span class="cf-no-screenshot error"></span>
            
          </div>
        </div>
      </div><!-- /.captcha-container -->

      <div class="cf-section cf-wrapper">
        <div class="cf-columns two">
          <div class="cf-column">
            <h2 data-translate="blocked_why_headline">Why have I been blocked?</h2>

            <p data-translate="blocked_why_detail">This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.</p>
          </div>

          <div class="cf-column">
            <h2 data-translate="blocked_resolve_headline">What can I do to resolve this?</h2>

            <p data-translate="blocked_resolve_detail">You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.</p>
          </div>
        </div>
      </div><!-- /.section -->

      <div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
  <p class="text-13">
    <span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">8ee307ac08f48591</strong></span>
    <span class="cf-footer-separator sm:hidden">&bull;</span>
    <span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
      Your IP:
      <button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
      <span class="hidden" id="cf-footer-ip">141.11.132.229</span>
      <span class="cf-footer-separator sm:hidden">&bull;</span>
    </span>
    <span class="cf-footer-item sm:block sm:mb-1"><span>Performance &amp; security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link" target="_blank">Cloudflare</a></span>
    
  </p>
  <script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classList.remove("hidden"),c.addEventListener("click",function(){c.classList.add("hidden");a.getElementById("cf-footer-ip").classList.remove("hidden")}))}var a=document;document.addEventListener&&a.addEventListener("DOMContentLoaded",d)})();</script>
</div><!-- /.error-footer -->


    </div><!-- /#cf-error-details -->
  </div><!-- /#cf-wrapper -->

  <script>
  window._cf_translation = {};
  
  
</script>

<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8ee307ac08f48591',t:'MTczMzU1ODkyOS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>

Expected behavior

import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import requests

# 版本常量
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0 LightnovelSpider/5' # 客户端用户代理:前部与最新的Edge浏览器保持一致,尾部标记了本程序的版本。
# 环境常量:根据实际环境,可能需要在每次运行前手动变更的常量。
PROXY = 'http://127.0.0.1:7897' # 必填。如果连接到一个代理池,注意检查代理池中各个代理节点的可用性。
COOKIES = '''Hidden for Privacy''' # 必填。需要提供一组COOKIES供会话初始化。

if __name__ == '__main__':
    headers = {
        'User-Agent': USER_AGENT
    }
    response = requests.get(
        url= 'https://tw.linovelib.com/novel/1.html',
        cookies= {i.split("=")[0]:i.split("=")[-1] for i in COOKIES.split("; ")},
        proxies= {
            'http': PROXY,
            'https': PROXY
        },
        headers= headers,
        verify= False
    )
    print(response.status_code)

200

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>惡魔高校DxD線上看_嗶哩輕小說</title>
<meta name="keywords" content="惡魔高校DxD(High School DxD)在線閱讀,惡魔高校DxD(High School DxD)輕小說,石踏一榮,富士見文庫,嗶哩輕小說">
<meta name="description" content="惡魔高校DxD(High School DxD)是石踏一榮所寫的富士見文庫輕小說,嗶哩輕小說免費提供惡魔高校DxD(High School DxD)最新清爽乾淨的文字章節在線閱讀">
<meta name="applicable-device" content="mobile" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="viewport" content="initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width" />
<meta name="theme-color" content="#232323" media="(prefers-color-scheme: dark)" />
<meta property="og:type" content="novel" />
<meta property="og:title" content="惡魔高校DxD" />
<meta property="og:description" content="我,兵藤一誠是個年齡=沒女朋友經歷的高二生。這樣的我也交到女朋友了!抱歉了朋友,我要先你們一步踏上大人的階梯!照理來說應該是這樣才對,為什麼我會被女朋友殺死?
明明什麼甜頭都沒嘗到,這個世界還有天理嗎?
然而全校第一美少女,莉雅絲·吉蒙里學姊救了這樣的我。自稱是惡魔的她,告訴我一個衝擊的事實。
「你已經轉生變成惡魔了。為我工作吧!」
在學姊的胸部和獎勵的引誘之下,我身為惡魔僕人的人生就此展開。
純粹靠著氣勢與煩惱,校園奇幻戰鬥戀愛物語第一集!" />
<meta property="og:image" content="https://tw.linovelib.com/files/article/image/0/1/1s.jpg" />
<meta property="og:novel:category" content="富士見文庫" />
<meta property="og:novel:author" content="石踏一榮" />
<meta property="og:novel:book_name" content="惡魔高校DxD" />
<meta property="og:novel:read_url" content="https://tw.linovelib.com/novel/1/catalog" />
<meta property="og:url" content="https://tw.linovelib.com/novel/1.html" />
<meta property="og:novel:status" content="完結" />
<meta property="og:novel:author_link" content="https://tw.linovelib.com/authorarticle/石踏一榮.html" />
<meta property="og:novel:update_time" content='2024-02-25 23:45:52' />
<meta property="og:novel:latest_chapter_name" content="短篇集 DX.4 學生會與利維坦 後記" />
<meta property="og:novel:latest_chapter_url" content="/novel/1/225508.html" />
<link rel="stylesheet" href="https://tw.linovelib.com/themes/zhmb/css/info.css?v0118b5">
<link rel="alternate" hreflang="zh-Hans" href="https://www.bilinovel.com/novel/1.html" />
<script src="https://tw.linovelib.com/themes/zhmb/js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="/scripts/darkmode.js"></script>
<script src="https://tw.linovelib.com/themes/zhmb/js/core.js?v0821b2"></script>
<script async src="https://tw.linovelib.com/themes/zhmb/js/lazysizes.min.js"></script>
<script type="text/javascript" src="https://tw.linovelib.com/scripts/common.js?v0316b1" charset="UTF-8"></script>
<script type="text/javascript">var ual = navigator.language.toLowerCase();if(ual == 'zh-cn'){window.location.replace("https://w.linovelib.com/novel/1.html");}</script>
<style>}.guide-content{backdrop-filter: blur(50px);-webkit-backdrop-filter: blur(50px);background-color: rgba(255, 255, 255, 0.1);}.sp-dark-mode .guide-content{background-color: rgba(0, 0, 0, 0.1);color: #eee;}.sp-dark-mode .header{background-color: unset;}.book-detail-btn .icon {margin-right: 0.25rem;}.score-tip{position: relative;display: flex; justify-content: space-between; align-items: center;color: rgba(255,255,255,.7);line-height: .65rem; font-size: .6rem;}.orange{color:rgba(255,126,0,.65);}@media (prefers-color-scheme: dark){.guide-content{color: #eee;}}@media screen and (max-width: 600px){.header a, .header-operate>.icon, .header-operate-a{color: rgba(255,57,85, .15);}}</style>
<style>@media screen and (min-width:768px){.page-fans .book-ol li, .trigger-book-comment .book-ol li{width: calc(50% - 6px);display: inline-block;vertical-align: top;}.trigger-book-comment .book-li:nth-child(3)::after, .page-fans .book-ol-comment .book-li:nth-child(3)::after{border-bottom: none;}.module-slide-ol{white-space: normal;padding-bottom: .75rem;}.module-slide-li {width: calc(19% - 5px);}.module-slide-a {width: 6.125rem;padding: 0.75rem 1.45rem 0.5rem;}.module-slide-img {height: 8.5rem;}.book-comment-p{min-height: 2.5625rem;}.corner{width: 45px;height: 45px;}.corner>em{right: -20px;line-height: 22px;font-size: 15px;}}</style>
</head>
<body id="scroll">
<script src="https://tw.linovelib.com/themes/zhmb/js/sprite.js"></script>
<div class="page page-book-detail">
        <div class="content">
                <header id="header" class="header"><a href="/" class="header-back jsBack"><svg class="icon icon-arrow-l"><title>返回</title><use xlink:href="#icon-arrow-l"></use></svg></a>
                <!--<span class="header-back-title">惡魔高校DxD</span>-->
                <div class="header-operate">
                        <a id="openSearchPopup" href="javascript:" class="icon icon-search" title="搜索"><svg><use xlink:href="#icon-search"></use></svg></a>
                        <a id="openGuide" href="javascript:" class="icon icon-more" title="更多" data-rel="guide"></a>
                </div>
                </header>
                <!-- 更多內容的導航 S -->
<div id="guide" class="guide">
        <i id="guideOverlay1" class="guide-overlay"></i>
        <div class="guide-content">
                <nav class="guide-nav">
                <a href="/" class="guide-nav-a">
                <i class="icon icon-home"></i>
                <h4 class="guide-nav-h">首頁</h4>
                </a>
                <a href="/alltopics" class="guide-nav-a">
                <i class="icon icon-sort"></i>
                <h4 class="guide-nav-h">圈子</h4>
                </a>
                <a href="/top.html" class="guide-nav-a">
                <i class="icon icon-rank"></i>
                <h4 class="guide-nav-h">排行榜</h4>
                </a>
                <a href="/wenku/" class="guide-nav-a">
                <i class="icon icon-fuli"></i>
                <h4 class="guide-nav-h">文庫</h4>
                </a>
                <a href="/topfull/postdate/1.html" class="guide-nav-a">
                <i class="icon icon-end"></i>
                <h4 class="guide-nav-h">完本</h4>
                </a>
                <a href="/user.php" class="guide-nav-a ">
                <i class="icon icon-account"></i>
                <h4 class="guide-nav-h">賬戶</h4>
                </a>
                </nav>
                <div class="guide-footer">
                <a href="/bookcase.php" class="btn-primary" data-size="14">我的收藏</a>
                </div>
        </div>
</div>
<!-- 更多內容的導航 E -->
<!-- 公用頭部 E -->
                <div id="bookDetailWrapper" class="module module-merge book-detail-x">
                        <img src="https://tw.linovelib.com/files/article/image/0/1/1s.jpg?1708873318" class="book-cover-blur" alt="惡魔高校DxD">
                        <div class="book-detail-info">
                                <div class="book-layout">
                                        <div class="module-book-cover">
                                                <div class="module-item-cover">
                                                        <img src="https://tw.linovelib.com/files/article/image/0/1/1s.jpg?1708873318" class="book-cover" alt="惡魔高校DxD">
                                           </div>
                                        </div>
                                        <div class="book-cell">
                                                <h1 class="book-title">惡魔高校DxD</h1>
                                                <div class="book-rand-a">
                                                        <span class="authorname"><a href="/authorarticle/石踏一榮.html">石踏一榮</a></span><i class="char-pipe">,</i><span class="illname"><a href="/illustratorarticle/みやま零.html"><ruby>みやま零<rt>(插畫)</rt></ruby></a></span></div>
                                                <p class="book-meta book-layout-inline"><!--  次閱讀<span class="char-pipe">/</span> -->26733 人收藏<span class="char-pipe">/</span>4361 次推薦<b class="dot-pipe">/</b></p><p class="book-meta book-layout-inline">398.1 萬字<span class="char-pipe">|</span>完結<span class="char-pipe">|</span>已動畫化</p>
                                                <p class="book-meta">
                                                                <span class="tag-small-group origin-left">
                                                                        <em class="tag-small red"><a href="/tagarticle/63/1.html">校園</a></em><em class="tag-small red"><a href="/tagarticle/15/1.html">奇幻</a></em><em class="tag-small red"><a href="/tagarticle/18/1.html">戰鬥</a></em><em class="tag-small red"><a href="/tagarticle/48/1.html">後宮</a></em><em class="tag-small red"><a href="/tagarticle/225/1.html"> 青梅竹馬</a></em><em class="tag-small red"><a href="/tagarticle/223/1.html">人外</a></em><em class="tag-small orange"><a href="/wenku/lastupdate_223_0_0_0_0_0_0_1_0.html">富士見文庫</a></em><em class="tag-small gray"><a href="/wenku/lastupdate_0_0_0_1_0_0_0_1_0.html">日本輕小說</a></em>
                                                                </span>
                                                        </p>
                                        </div>
                                </div>
                                <div class="book-detail-btn" data-read-status="" data-bookshelf-status="">
                                        <ul class="btn-group">
                                                <li class="btn-group-cell"><a href="/novel/1/catalog" class="btn-normal red" id="btnReadBook">開始閱讀</a></li>
                                                <li class="btn-group-cell"><a href="javascript:" id="a_addbookcase" onclick="toggleBookcaseStatus(this, 1);" class="btn-normal white"><svg class="icon blue"><use xlink:href="#icon-booklist-star"></use></svg>書架</a></li>
                                                <li class="btn-group-cell"><a href="/download/1.html" class="btn-normal white"><svg class="icon blue"><use xlink:href="#icon-down"></use></svg>下載</a></li>    
                                                <li class="btn-group-cell"><a href="/wiki/1.html" class="btn-normal purple"><svg class="icon white"><use xlink:href="#icon-qi"></use></svg>詳解</a></li>        
                                        </ul><input id="shareurl" type="text" readonly style='opacity: 0;position:fixed;z-index: -1000;' value="share.linovelib.net/1-0" />
                                </div>
                        </div>
                </div>
                <div class="module module-merge">
                        <section id="bookSummary" class="book-summary">

                                <content>我,兵藤一誠是個年齡=沒女朋友經歷的高二生。這樣的我也交到女朋友了!抱歉了朋友,我要先你們一步踏上大人的階梯!照理來說應該是這樣才對,為什麼我會被女朋友殺死?<br />   
明明什麼甜頭都沒嘗到,這個世界還有天理嗎?<br />
然而全校第一美少女,莉雅絲·吉蒙里學姊救了這樣的我。自稱是惡魔的她,告訴我一個衝擊的事實。<br />
「你已經轉生變成惡魔了。為我工作吧!」<br />
在學姊的胸部和獎勵的引誘之下,我身為惡魔僕人的人生就此展開。<br />
純粹靠著氣勢與煩惱,校園奇幻戰鬥戀愛物語第一集!</content>
                                <div class="backupname"><em>別名</em><span class="bkname-body gray">High School DxD</span></div>
                                        <span class="book-summary-more"><svg class="icon icon-arrow-r"><use xlink:href="#icon-arrow-r"></use></svg></span></section>
                                 <a href="/novel/1/catalog" class="book-meta book-status">
                                 <div class="book-meta-l"><strong class="book-spt">最后更新</strong><span class="char-dot">·</span>2024-02-25</div>
                                 <div class="book-meta-r">
                                 <p class="gray ell">短篇集 DX.4 學生會與利維坦 後記</p>
                                 <svg class="icon icon-arrow-r"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-arrow-r"></use></svg>
                                 </div>
                                 </a>
                </div>
                <!-- 互動區 -->
        <div class="module">
        <ul id="payTicketsX" class="btn-group">
                <li class="btn-group-cell">
                        <a href="/gift.php?id=1" id="a_gift" class="book-pay book-pay-a">
                                <i class="icon icon-gift"></i>
                                <h5 class="book-pay-h">鮮花</h5>
                                <p class="book-pay-p"><span class="month-ticket-cnt">8547</span></p>
                        </a>
                </li>
                <li class="btn-group-cell">
                        <a href="javascript:" id="a_uservote" onclick="Ajax.Tip('https://tw.linovelib.com/modules/article/uservote.php?id=1', {method: 'POST'});" class="book-pay book-pay-a">
                                <i class="icon icon-pay-like"></i>
                                <h5 class="book-pay-h">推薦票</h5>
                                <p class="book-pay-p">本週<span class="recomm-ticket-cnt">12</span>推薦</p>
                        </a>
                </li>
                <li class="btn-group-cell">
                        <a href="/gift.php?id=1&type=egg" class="book-pay book-pay-a">
                                <i class="icon icon-checkin-egg"></i>
                                <h5 class="book-pay-h">臭雞蛋</h5>
                                <p class="book-pay-p"><span class="reward-week-cnt">20</span></p>
                        </a>
                </li>
                <li class="btn-group-cell">
                        <a href="/fansheat_1_1.html" class="book-pay">
                                <i class="icon icon-fans"></i>
                                <h5 class="book-pay-h">互動</h5>
                                <p class="book-pay-p"><span class="reward-week-cnt">99</span></p>
                        </a>
                </li>
        </ul>
        <!-- 評分區 -->
        <a href="javascript:" class="subject-rating-root" id="asideTrigger">
                <div class="sub-score">
                        <div class="score-tip"><span>參與評價,表達對作品的態度</span><div class="myrating">我的評價<div class="star-display"><div class="rating"><div class="rating-stars"><div class="rateunit"><span style="width:calc(0/10*100%);" class="rpercent"></span></div></div></div></div><svg class="icon icon-arrow-r"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-arrow-r"></use></svg></div></div>
                        <div class="sub-content" id="a_userate">
                                <div class="sub-rating">
                                         <div class="score-num">9.9</div>
                                                 <div class="star-display"><div class="rating"><div class="rating-stars"><div class="rateunit"><span style="width:calc(9.9/10*100%);" class="rpercent"></span></div></div></div><p class="done-count"><em>1799 人評價</em></p></div></div>
                                                          <div class="sub-chart"><div class="star-stats"><div class="stars-wrap"><span class="rating-star-icon"></span><span class="rating-star-icon"></span><span class="rating-star-icon"></span><span class="rating-star-icon"></span><span class="rating-star-icon"></span></div><div class="chart-wrap"><span class="rating-progress" style="width: calc(1764/1799*100%);"></span></div></div><div class="star-stats"><div class="stars-wrap"><span class="rating-star-icon"></span><span class="rating-star-icon"></span><span class="rating-star-icon"></span><span class="rating-star-icon"></span></div><div class="chart-wrap"><span class="rating-progress" style="width: calc(19/1799*100%);"></span></div></div><div class="star-stats"><div class="stars-wrap"><span class="rating-star-icon"></span><span class="rating-star-icon"></span><span class="rating-star-icon"></span></div><div class="chart-wrap"><span class="rating-progress" style="width: calc(8/1799*100%);"></span></div></div><div class="star-stats"><div class="stars-wrap"><span class="rating-star-icon"></span><span class="rating-star-icon"></span></div><div class="chart-wrap"><span class="rating-progress" style="width: calc(3/1799*100%);"></span></div></div><div class="star-stats"><div class="stars-wrap"><span class="rating-star-icon"></span></div><div class="chart-wrap"><span class="rating-progress" style="width: calc(5/1799*100%);"></span></div></div>
                                </div>
                        </div>
                </div>
        </a>
        <!-- 粉絲榜 -->
        <style>.page-fans .book-ol-rank .book-layout {padding-top: 0.75rem;padding-bottom: 0.75rem;padding-left: 3.125rem;margin-left: -3.125rem;}.page-fans .book-title{font-size: .8125rem;}.fans-point {color: gray;font-size: .725rem;font-family: pingfang sc;}.page-fans .book-title-r img{position: absolute; top: 55%; bottom: 0; right: 1.125rem; width: 3.125rem;margin: auto; margin-top: -0.70625rem;}.book-ol-rank .book-li::before{font:1em/1.5em 'PingFang SC';position:absolute;top:50%;bottom:0;left:-2.125rem;margin:auto;margin-top:-.70625rem;content:counter(bookrank);counter-increment:bookrank;color:#b8b8b8;width:1.375rem;height:1.8125rem;text-align:center}.book-ol-rank .book-li-fir::before{top:46%;content:'1';width:1.375rem;height:1.9375rem;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAA8CAYAAAFqVWgMAAAABGdBTUEAALGPC/xhBQAAAt5JREFUaAXtmj9ok0EUwN+7rxFSG0nTuLs4dEkTFx3ERRB1dFHp0A6VuHy1LkXc/QM6tM1iEFErFKnOLoKDVdwSrYOCg4KbJI1YqZWSO98Ndx5fLv8kF0O5D8J7d/fey7vfd/nyeAkCXZVSKKQ0L7RNSgNmWpl6XxfShwooXxCwIzIJa7rWjPo22YBVErXmaVI0dWuqpoGp7xpjBHyMiN/NzUkdK+VwEwSMRBeiY3K+wDoxlI5CiLu7Bl2UhBr7DSoSUlppMGTzppHSh5QCiCvp3NKkHgPcknqlNLtFxygudayWZ9foRB2Vg15ezEVQmaCVRS8y94E1RY/Co9AEtOLsVPx9Yun3MhX8hUPs+Fhm4Y05K/VqKbxDdWA+Oq/GuFEOr3EBVxFgJwiCk8mJhRdqsVtZLYcrQsB56ScfmzPyi7jbIE3tEX6mc4VEV9VW02CRBSovXjm5efIZ7ySw3IAPrG+jR+FRaAJa8afCo9AEtOJPhUehCWjlv5+KLcbgChUiD3VKbZSWRSFDWE7lClORGNO18ly2DvW1Vr2UxhIL8XcQ4InRzOLLSEDrkArB+1QITkcXdWDa5moqu3iOZEOXMupkG9fWLx3jdfGcyqs9tNPruFGaO8Wh/sxmPGhzDILTjCN/MmiJNctH5krNN7G3mcHAzVOuzj7PrjbrE3ZFVsX1hBUJV9ITdkVWxfWEFQlX0hN2RVbF9YQVCVfSE3ZFVsX1hBUJV9ITdkVWxfWEFQlX0hN2RVbFbdkEU0btJP34+Z5aUUUxIh6NHSz8MO3F18vxakWcReAXqd102Fz7F133wDp1pv9OfQCEYhAMLyczN2ud+pl24uN8ora9PUlNuTxtImuutdPlL7mfyemA1RDxEwosxuLDD/aN36habXo0Sa3LJAc+Ra3LvAAxbgtLd/ELCrEa1N69nhGc5xDZeozFniYmbn+zOfR7brMU7t9h7AwXIkN39m0qO3rvD+RJ0v+birTCAAAAAElFTkSuQmCC);color:#d7943e;background-repeat:no-repeat;background-size:cover}.book-ol-rank .book-li-sec::before{top:46%;content:'2';width:1.375rem;height:1.9375rem;text-align:center;background:url(/readnovelm/img/second-9b77d0630e.png);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAA8CAYAAAFqVWgMAAAABGdBTUEAALGPC/xhBQAAAtFJREFUaAXtmj9o00EUx9+7xEqtlYKINS6uLlInHcRFEHV0UenQDpWo+CddRNx1cfilTgYpaoUi1dlFcFDBVXRwcNAlv0hFKlpapOb3fDfccb1c0kRyMZT3g/Deu3v3zbvP7/rr/Y4g8JVU66Ste2GoUScoN8v1e9oxvTeH+oM5dVgXESw3WFHPGhuwaqLBOl2Krh8s1U1w/U2TjABPEPCHOzntYznNfhHRdr/DjxWq86qdRD0wo+z+pkHnkzCxTNCQ0DZIA5W67iYZP28cRJgvFXLjJmZ7R/tJNVsBoEHt6yX6mlfeER1089LLueuiusAgi25ULsKWoqAQFJaAdaKtCvvEsl+1zsFVyOOx6d34dl0zB+W0fo8Iin67ifnpVr/FCTcRcS2n8MSVUXxpOju1rDXPWuf0OJxJaUr/I+5UpFk+F7hcKqjhjnZbzcT8dhZ/E+Xm6Wd8FGE9AxG291FQCApLwDqyKgSFJWAdWRWCwhKwzv9dFbwBWUFQNwDhkS1pA6flppBfbef41XbC05hMFmkM/5B+o2166NKwxeKjm9+AeLxUwFeeYDAsV+sP+PRx0u90hRd4M3eWp91wSukPCsXllI7yDF7wS/oAz/Q2JjU6CVn2PJTcd21KnVJA9LTvCmtWENeqCx5q1t937VxrtL/nWJOVgmORNbpC2JCIZYVwLLJGVwgbErGsEI5F1ugKYUMilhXCscgaXSFsSMSyQjgWWaMrhA2JWFYIxyJrdFsegpmkDS3iB4VYwQF4fHUn/nTzF4gGq1/hDBJd4COnQ27fv/juGVhb4/mM7CMfwFW2bIO5SyO41NYgL2n2Gw0vr8E4T6BIQGNed8tQ/wDmMw/cF8riwj6Bwkp+CB5e3oHfQzndakuWaEStwgRPoMj17A/pMqwvyLcsl9Zgin8JdhBQvd+K8OziKC6GBvS67W6NdmUEp4GyA1zbu2t7YPYvGM7VPd16ihYAAAAASUVORK5CYII=);color:#6c9acb;background-repeat:no-repeat;background-size:cover}.book-ol-rank .book-li-thi::before{top:46%;content:'3';width:1.375rem;height:1.9375rem;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAA8CAYAAAFqVWgMAAAABGdBTUEAALGPC/xhBQAAAuRJREFUaAXtmUFrU0EQgGdeYrBoQRRvgmKTgxepJz2IF0VN0pMXlYhJQ6X+AhHvevEPGMS8tkKR6EVIchEUbNGr6MFDohE8CIpWaxop2oyz6G7WZE36QjaFsg8eM7s7O2/e9zb7JvMQ+KgU8ySkfqCpUxh4upWuD3UgNpFFcYYxfEQEYQzXGNHQOjuwCqLGOHWKum4MVTfQ9U1jjID3+Pyq35zQBbrvLLe3D3S0ES4JGr0NxUyC25sGXQeJvx3uBnUyRhqIeEU3knpYKoA4H0tOplQb4KbQq0W/QUAjQsdqMb/AW+lR0Rjk4dlwKgI0shhE5M6xouhQOBSKgFKsrYrWjqWu1VL4xfqDQt7xWDz9vNX7R6uW/FtENN3eL9u8u/nXeau7Bgg/EeF0NJF9LAeDymopP08E58U8rJTyU+JFHNRJF/s6Z4ejgbKtLs7+GUKARSsPT+zxVhyL8J1j9RAdCodCEVCKWxUOhSKgFLcqHApFQCkbuyo4AWl4gFc5l5tVIfVQuieFCHPRZDbd5iNTK/njv4gWuP+/tZTOFAthNQTeyf3JzNM2h8YmZ50+Z52Z9kHlmDPNwlhi8hz/Q+cMKfjxtjRzbI3oEZd6IozsBlbLs3FqrpWDuxr+DPRCCY+oeX/4l+7viiJWD4i29Td9A2ZxrNZ+z7ZuxwVsi6z06whLErakI2yLrPTrCEsStqQjbIus9OsISxK2pCNsi6z06whLErakI2yLrPTrCEsStqQjbIus9Nu1CCaNekkuQ70iwNxODN/dlbiwrNu/f1YYWV1aOcsfSS/z98zD+lg/uqqBrXsywmsuDebCFJnbO5FaWvc8zfDT4sPR5W9fUk2AaS7kjGtDPVXkal6Nq3n7TJZcfKuAh7mtEZzZcyL92WQzqL7aE39HswHpJvD3bIIDJr/8JN8hUSH0plyf4q/Qh7i++JK2hB5ET138aJow7L4P5cLuFaqf4eV2kKugL8bimTu/AXHgyM0f56+xAAAAAElFTkSuQmCC);background-repeat:no-repeat;color:#947360;background-size:cover}.book-ol-rank .book-li-fou::before{top:46%;content:'4';width:1.375rem;height:1.9375rem;text-align:center;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAA8CAMAAAAqjKioAAAAP1BMVEVHcEze3t7e3t7e3t7f39/e3t7e3t7e3t7k5OTf39/e3t7////f39/d3d3f39/d3d3e3t7i4uLd3d3e3t7e3t6sJ12jAAAAFHRSTlMAp2PFadQ99RFzlwIzoEnfhQmh2oqDbp8AAAB/SURBVHja7c5BDoMwDETRIXGwk7RA29z/rAWBkLMBV+rSf+PN08hA4GaKAzA1cxOiHUewHTPaDzl27NixY8eOHf8J85Dzk004kWDtFeId5veIs0fhC5yyoEsodVh9qkbVvPoe834/erRP8jE/Y9lHK64ah21+QaVCgruqUAn1C6rCwGvN0XspAAAAAElFTkSuQmCC);background-repeat:no-repeat;color:#bbb2ac;background-size:cover}.page-book-detail .page-fans::before{margin: 0 1rem;}.page-fans .book-ol-comment .book-li::after {margin-left: 3.375rem;margin-right: 1rem;}@media screen and (min-width:768px){.book-li-fir .book-title-r img, .book-li-thi .book-title-r img{right: 1.5rem;}.page-fans .book-li-sec .book-layout, .page-fans .book-li-fou .book-layout{margin-left: -2.125rem;}.book-ol-rank .book-li-sec::before, .book-ol-rank .book-li-fou::before{left: -1.125rem;}}</style>
<div class="module-content page-fans">
<ol class="book-ol book-ol-comment book-ol-rank">
        <li class="book-li book-li-fir"><!--<em></em>-->
                <div class="book-layout">
                        <div class="book-author-vv fans-avatar">
                                <img class="book-author-avatar lazyload" data-src="https://tw.linovelib.com/files/system/avatar/334/334259.jpg" src="https://tw.linovelib.com/images/noavatar.jpg" data-expand='50' onerror="this.src='https://tw.linovelib.com/images/noavatar.jpg';this.onerror=null;" alt="國家隊-零貳頭像">
                        </div>
                        <div class="book-cell">
                                <div class="book-title-x">
                                        <div class="book-title-r">
                                                <img src="/images/fans/label_top01.png">
                                        </div>
                                        <div class="book-title-l">
                                                <p class="book-title" title="粉絲榜第1位">國家隊-零貳</p>
                                                <span class="fans-point">熱力值 4784</span>
                                        </div>
                                </div>
                        </div>
                </div>
        </li>
        <li class="book-li book-li-sec"><!--<em></em>-->
                <div class="book-layout">
                        <div class="book-author-vv fans-avatar">
                                <img class="book-author-avatar lazyload" data-src="https://tw.linovelib.com/files/system/avatar/531/531512.jpg" src="https://tw.linovelib.com/images/noavatar.jpg" data-expand='50' onerror="this.src='https://tw.linovelib.com/images/noavatar.jpg';this.onerror=null;" alt="真尋歐尼醬頭像">
                        </div>
                        <div class="book-cell">
                                <div class="book-title-x">
                                        <div class="book-title-r">
                                                <img src="/images/fans/label_top03.png">
                                        </div>
                                        <div class="book-title-l">
                                                <p class="book-title" title="粉絲榜第2位">真尋歐尼醬</p>
                                                <span class="fans-point">熱力值 621</span>
                                        </div>
                                </div>
                        </div>
                </div>
        </li>
        <li class="book-li book-li-thi"><!--<em></em>-->
                <div class="book-layout">
                        <div class="book-author-vv fans-avatar">
                                <img class="book-author-avatar lazyload" data-src="https://tw.linovelib.com/files/system/avatar/243/243404.jpg" src="https://tw.linovelib.com/images/noavatar.jpg" data-expand='50' onerror="this.src='https://tw.linovelib.com/images/noavatar.jpg';this.onerror=null;" alt="kinson72002頭像">
                        </div>
                        <div class="book-cell">
                                <div class="book-title-x">
                                        <div class="book-title-r">
                                                <img src="/images/fans/label_top03.png">
                                        </div>
                                        <div class="book-title-l">
                                                <p class="book-title" title="粉絲榜第3位">kinson72002</p>
                                                <span class="fans-point">熱力值 541</span>
                                        </div>
                                </div>
                        </div>
                </div>
        </li>
        <li class="book-li book-li-fou"><!--<em></em>-->
                <div class="book-layout">
                        <div class="book-author-vv fans-avatar">
                                <img class="book-author-avatar lazyload" data-src="https://tw.linovelib.com/files/system/avatar/248/248331.jpg" src="https://tw.linovelib.com/images/noavatar.jpg" data-expand='50' onerror="this.src='https://tw.linovelib.com/images/noavatar.jpg';this.onerror=null;" alt="1051207658頭像">
                        </div>
                        <div class="book-cell">
                                <div class="book-title-x">
                                        <div class="book-title-r">
                                                <img src="/images/fans/label_top03.png">
                                        </div>
                                        <div class="book-title-l">
                                                <p class="book-title" title="粉絲榜第4位">1051207658</p>
                                                <span class="fans-point">熱力值 500</span>
                                        </div>
                                </div>
                        </div>
                </div>
        </li>
</ol>
<a href="/fans/1" class="book-li-more book-li-more-comments">更多粉絲</a>
</div>

        </div>
                <!-- 書評區 -->
                <div class="module trigger-book-comment">

                </div>
                <!-- 作者區 -->
                <div class="module">
                                <div class="module-header">
                                        <div class="module-header-l">
                                                <h3 class="module-title">本書作者</h3>
                                        </div>
                                </div>
                                <div class="module-content">
                                        <ol class="book-ol book-ol-author">
                                                <li class="book-li">
                                                        <a href="https://tw.linovelib.com/authorarticle/石踏一榮.html" class="book-layout books-author">
                                                                <div class="book-author-vv" role="option">
                                                                        <img class="book-author-avatar" src="/images/noauthor.jpg" alt="石踏一榮的頭像">
                                                                        <div><aria>作者等級:</aria><em class="tag-honor orange"><i>Lv.5</i></em></div>
                                                                </div>
                                                                <div class="book-cell">
                                                                        <div class="book-title-x">
                                                                                <h4 class="book-title">石踏一榮</h4>
                                                                        </div>
                                                                        <p class="book-desc">輕小說作家</p>
                                                                </div>
                                                                <svg class="icon icon-arrow-r" aria-hidden="true"><use xlink:href="#icon-arrow-r"></use></svg>
                                                        </a>
                                                </li>
                                        </ol>
                                        <style>.page-book-detail .book-ol-author .books-author{padding-bottom:0}</style><div class="module-slide"><ol class="module-slide-ol" id="book-friend-list-container"><li class="module-slide-li"><a href="/novel/1.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/0/1/1s.jpg?1708873318" class="module-slide-img lazyload" data-expand='50' alt="惡魔高校DxD"><figcaption class="module-slide-caption">惡魔高校DxD</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/2570.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/2/2570/2570s.jpg?1717421328" class="module-slide-img lazyload" data-expand='50' alt="真惡魔高校DxD"><figcaption class="module-slide-caption">真惡魔高校DxD</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/2510.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/2/2510/2510s.jpg?1708879030" class="module-slide-img lazyload" data-expand='50' alt="墮天的狗神 -SLASHDOG-"><figcaption class="module-slide-caption">墮天的狗神 -SLASHDOG-</figcaption><p class="module-slide-author"></p></a></li></ol></div>
                                </div>
                </div>
                <!-- 譯者者區 -->
                <!-- 標籤區 -->
                <div class="module">
                        <div class="module-header">
                                <div class="module-header-l">
                                        <h3 class="module-title">作品標籤</h3>
                                </div>
                        </div>
                           <div class="module-content">
                                        <div class="search-tags">

                                                                  <a href="/wenku/lastupdate_63_0_0_0_0_0_0_1_0.html" class="btn-line-gray">校園</a>
                                                                  <a href="/wenku/lastupdate_15_0_0_0_0_0_0_1_0.html" class="btn-line-gray">奇幻</a>
                                                                  <a href="/wenku/lastupdate_18_0_0_0_0_0_0_1_0.html" class="btn-line-gray">戰鬥</a>
                                                                  <a href="/wenku/lastupdate_48_0_0_0_0_0_0_1_0.html" class="btn-line-gray">後宮</a>
                                                                  <a href="/wenku/lastupdate_225_0_0_0_0_0_0_1_0.html" class="btn-line-gray">青梅竹馬</a>
                                                                  <a href="/wenku/lastupdate_223_0_0_0_0_0_0_1_0.html" class="btn-line-gray">人外</a>
                                        </div>
                                </div>
                </div>
                <!-- 推薦區 -->
                <div class="module" data-load-status="wait">
                        <div class="module-header">
                                <div class="module-header-l">
                                        <h3 class="module-title">富士見文庫輕小說推薦</h3>
                                </div>
                        </div>
                        <div class="module-content">
                                <div class="module-slide">
                                        <ol class="module-slide-ol" id="book-friend-list-container">
                                <li class="module-slide-li"><a href="/novel/41.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/0/41/41s.jpg?1705762530" class="module-slide-img lazyload" data-expand='50' alt="不起眼女主角培育法"><figcaption class="module-slide-caption">不起眼女主角培育法</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/2399.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/2/2399/2399s.jpg?1730201784" class="module-slide-img lazyload" data-expand='50' alt="放學後,到異世界咖啡廳喝杯咖啡"><figcaption class="module-slide-caption">放學後,到異世界咖啡廳喝杯咖啡</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/39.html" class="module-slide-a"><span class="corner orange"><em>8.1</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/0/39/39s.jpg?1726420675" class="module-slide-img lazyload" data-expand='50' alt="爆肝工程師的異世界狂想曲"><figcaption class="module-slide-caption">爆肝工程師的異世界狂想曲</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/3805.html" class="module-slide-a"><span class="corner orange"><em>9.7</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/3/3805/3805s.jpg?1729580634" class="module-slide-img lazyload" data-expand='50' alt="我買下了與她的每周密會 ~以五千圓為借口,共度兩人時光~"><figcaption class="module-slide-caption">我買下了與她的每周密會 ~以五千圓為借口,共度兩人時光~</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/4109.html" class="module-slide-a"><span class="corner orange"><em>9.8</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/4/4109/4109s.jpg?1727421064" class="module-slide-img lazyload" data-expand='50' alt="貴族千金只願意親近我。"><figcaption class="module-slide-caption">貴族千金只願意親近我。</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/2117.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/2/2117/2117s.jpg?1728826516" class="module-slide-img lazyload" data-expand='50' alt="不正經的魔術講師與禁忌教典"><figcaption class="module-slide-caption">不正經的魔術講師與禁忌教典</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/2734.html" class="module-slide-a"><span class="corner orange"><em>9.8</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/2/2734/2734s.jpg?1721415581" class="module-slide-img lazyload" data-expand='50' alt="轉生公主與天才千金的魔法革命"><figcaption class="module-slide-caption">轉生公主與天才千金的魔法革命</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/2865.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/2/2865/2865s.jpg?1700724513" class="module-slide-img lazyload" data-expand='50' alt="不起眼女主角培育法 Memorial"><figcaption class="module-slide-caption">不起眼女主角培育法 Memorial</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/1.html" class="module-slide-a"><span class="corner orange"><em>9.9</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/0/1/1s.jpg?1708873318" class="module-slide-img lazyload" data-expand='50' alt="惡魔高校DxD"><figcaption class="module-slide-caption"> 惡魔高校DxD</figcaption><p class="module-slide-author"></p></a></li><li class="module-slide-li"><a href="/novel/784.html" class="module-slide-a"><span class="corner orange"><em>9.8</em></span><img src="https://tw.linovelib.com/themes/zhmb/images/book-cover-no.svg" data-src="https://tw.linovelib.com/files/article/image/0/784/784s.jpg?1698675991" class="module-slide-img lazyload" data-expand='50' alt="夜想譚教誨師"><figcaption class="module-slide-caption">夜想譚教誨師</figcaption><p class="module-slide-author"></p></a></li>
                                        </ol>
                                </div>
                        </div>
                </div>
        </div>
</div>
<!-- 呼出評分功能 -->
<link rel="stylesheet" href="/sfont/font_1356455_c5d3d3ohlbq.css">
<style>.noscroll{position: relative;}.rate-content input{-webkit-appearance:none;-moz-appearance:none;border:none;outline:none;cursor:pointer;}.rate-content{display:inline-block;}.stars-content{display:flex;flex-flow:row-reverse}.stars-content input[type="radio"]{font-family:"iconfont";font-size:1.875rem;width:1.75rem;height:1.75rem;margin:0.45rem 0.75rem 0rem 0.75rem;text-align:center;transition:transform .2s ease;}input[type="radio"]::after{content:"\e645";color:#999;transition:color .4s ease;}input[type="radio"]:checked::after,input[type="radio"]:checked~input[type='radio']::after,input[type="radio"]:hover::after,input[type="radio"]:hover~input[type='radio']::after{content:"\e73c";color:#ffa822;}input[type="radio"]:hover{transform:scale(1.3);}.popup-pay-footer{max-width: 1000px;margin: auto;border-top:0;height:6.75rem;}.popup-pay-main{min-height:5.0625rem;}.gifts-options{margin-top:0;padding:0;height:0;}.rate-content .tip{position:absolute;top:2rem;}.rate-content .tip li{margin:0rem 0.875rem 0rem 0.875rem;display:inline-block;font-size:.75rem;text-align:center;}.popup-pay-submit [type=submit]{position:unset;width:100%;height:100%;right:0;top:0;margin:0;opacity:unset;}.popup-pay-footer .btn-submit{min-width:6.125rem;padding:0 1rem;height:2.75rem;font-size:1rem;text-align:center;border-color:unset;border-width:0;border-style:unset;}.sp-dark-mode .aside-content,.sp-dark-mode .aside-popup{background-color:#232323;}.sp-dark-mode .rate-content .tip li{color: #9e9e9e;}@media (prefers-color-scheme:dark){.aside-content,.aside-popup{background-color:#232323;}}</style>


<aside id="myModal" class="modal">
        <div class="modal-content">
                <i style="font-size:xx-small;">提示:收藏可以選擇是否進行分組</i>
                 <ul class="group-list">
                        <li onclick="selectGroup(0)">
                            <svg class="icon blue"><use xlink:href="#icon-booklist-detail"></use></svg>
                                <label for="group0">正在閱讀</label>
                        </li>
                        <li onclick="selectGroup(1)">
                            <svg class="icon blue"><use xlink:href="#icon-booklist-detail"></use></svg>
                                <label for="group1">新書關注</label>
                        </li>
                        <li onclick="selectGroup(2)">
                            <svg class="icon blue"><use xlink:href="#icon-booklist-detail"></use></svg>
                                <label for="group2">以後再看</label>
                        </li>
                        <li onclick="selectGroup(3)">
                            <svg class="icon blue"><use xlink:href="#icon-booklist-detail"></use></svg>
                                <label for="group3">已經看完</label>
                        </li>
                </ul>
        </div>
</aside>

<aside id="aside" class="aside" data-is-bind-scroll="true">
          <i id="asideOverlay" class="aside-overlay"></i>
          <div class="aside-popup">
                <div class="popup-pay-body">
                  <!-- 容器 -->
                  <form id="popupPayMain1" class="popup-pay-content active" name="rate" id="rate" action="/modules/article/rating.php?do=submit" method="post" enctype="mulgiftart/form-data">
                          <div class="popup-pay-footer">
                                  <div class="gift-options-lf">
                                  <div class="rate-content">
                                          <div class="stars-content">
                                                <input type="radio" name="score" value="10" >
                                                <input type="radio" name="score" value="8" >
                                                <input type="radio" name="score" value="6" >
                                                <input type="radio" name="score" value="4" >
                                                <input type="radio" name="score" value="2" >
                                          </div>
                                          <ul class="tip"><li>差勁</li><li>無聊</li><li>一般</li><li>好看</li><li>力薦</li></ul>
                                        </div>
                                </div>
                                        <!-- 提交按鈕 -->
                                        <div class="popup-pay-submit">
                                                <button type="button" class="btn-submit btn-charge-orignal">提交評價</button>
                                                <input type="hidden" name="id" value="1" />
                                        </div>
                                </div>
                  </form>
                </div>
          </div>
        </aside>
<footer class="footer">
          <div class="footer-link fuli-footer-link">
                <a href="/bookcase.php" class="footer-link-a dark">書架</a>
                <a href="/report.php" class="footer-link-a dark">反饋</a>
                <a href="/help.html" class="footer-link-a dark">幫助</a>
                <a href="//w.linovelib.com/novel/1.html" class="footer-link-a dark">简体</a>
                <a href="//cdn.a.ln.yodu.app/" class="footer-link-a dark" id="app"><b>客戶端</b></a>
                </div>
          <div class="footer-copy">Copyright &copy; 2024 嗶哩輕小說</div></footer>
        <div id="searchPopup" class="search-popup" style="display: none;">
          <header class="header">
                <form id="searchForm" action="https://cse.google.com/cse" class="search-form">
                  <div class="search-area">
                        <svg class="icon icon-search">
                          <use xlink:href="#icon-search"></use>
                        </svg>
                        <input name="cx" type="hidden" value="649de34f5e63448cb">
                        <input autofocus="autofocus" id="keyword" type="text" name="q" class="search-input" autocomplete="off">
                        <button id="clearSearchKeyword" type="button" class="search-reset" hidden>
                          <i class="icon icon-clear">
                                <svg>
                                  <use xlink:href="#icon-clear"></use>
                                </svg>
                          </i>
                        </button>
                  </div>
                  <a id="closeSearchPopup" href="javascript:" class="search-cancel">取消</a></form>
          </header>
          <div id="searchHotHistory" class="search-hot-history">
                <div id="searchPopularWords" class="search-popular loading-animation" style="overflow:hidden;transition:height .2s ease 0s;height:auto">
                  <div class="search-title-bar">
                        <h5 class="search-title">大家都在搜</h5></div>
                  <div class="search-tags">
                                <a href="/novel/1.html" class="btn-line-gray jsSearchLink">惡魔高校DxD</a>

                                <a href="/novel/2.html" class="btn-line-gray jsSearchLink">果然我的青春戀愛喜劇搞錯了</a>

                                <a href="/novel/3.html" class="btn-line-gray jsSearchLink">在地下城尋求邂逅是否搞錯了什麼</a>

                                <a href="/novel/4.html" class="btn-line-gray jsSearchLink">精靈使的劍舞</a>

                                <a href="/novel/5.html" class="btn-line-gray jsSearchLink">問題兒童都來自異世界?</a>

                                <a href="/novel/6.html" class="btn-line-gray jsSearchLink">關於我轉生變成史萊姆這檔事</a>

                                <a href="/novel/7.html" class="btn-line-gray jsSearchLink">Campione 弒神者!</a>

                                <a href="/novel/8.html" class="btn-line-gray jsSearchLink">歡迎來到實力至上主義的教室</a>
</div><hr><div style="line-height:1.4em;padding:1.2em;">支持 書名、作者、標籤<br><br><div>如果不記得書名,請輸入關鍵詞進行搜索<br>比如:青春|異世界|豬頭少年</div></div></div>
          </div>
        </div>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NG72YQN6TX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-NG72YQN6TX');
</script>
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?1251eb70bc6856bd02196c68e198ee56";
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(hm, s);
})();
</script>
<script>
  if ('serviceWorker' in navigator) {
      navigator.serviceWorker.getRegistrations().then(function(registrations) {
        for (let registration of registrations) {
          registration.unregister();
        }
      });
  }
</script>
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8ee32f819c200447',t:'MTczMzU2MDU2MS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>

Logs/tracebacks

None.

Python Version

$ python --version
Python 3.13.0

aiohttp Version

$ python -m pip show aiohttp
Name: aiohttp
Version: 3.11.8
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp
Author:
Author-email:
License: Apache-2.0
Location: C:\Users\14485\AppData\Roaming\Python\Python313\site-packages
Requires: aiohappyeyeballs, aiosignal, attrs, frozenlist, multidict, propcache, yarl
Required-by:

multidict Version

$ python -m pip show multidict
Name: multidict
Version: 6.1.0
Summary: multidict implementation
Home-page: https://github.com/aio-libs/multidict
Author: Andrew Svetlov
Author-email: [email protected]
License: Apache 2
Location: C:\Users\14485\AppData\Roaming\Python\Python313\site-packages
Requires:
Required-by: aiohttp, yarl

propcache Version

$ python -m pip show propcache
Name: propcache
Version: 0.2.0
Summary: Accelerated property cache
Home-page: https://github.com/aio-libs/propcache
Author: Andrew Svetlov
Author-email: [email protected]
License: Apache-2.0
Location: C:\Users\14485\AppData\Roaming\Python\Python313\site-packages
Requires:
Required-by: aiohttp, yarl

yarl Version

$ python -m pip show yarl
Name: yarl
Version: 1.18.0
Summary: Yet another URL library
Home-page: https://github.com/aio-libs/yarl
Author: Andrew Svetlov
Author-email: [email protected]
License: Apache-2.0
Location: C:\Users\14485\AppData\Roaming\Python\Python313\site-packages
Requires: idna, multidict, propcache
Required-by: aiohttp

OS

Windows 11

Related component

Client

Additional context

No response

Code of Conduct

  • I agree to follow the aio-libs Code of Conduct
@CodingMoeButa
Copy link
Author

It is a quite strange problem. It must be Aiohttp's internal defect. I do not think you would like to solve this "small" problem. It is time to use HTTPX and FastAPI. I guess I will never use Aiohttp more.

@Dreamsorcerer
Copy link
Member

Because you expect your issue to be fixed in under 2 hours...? It's not like you've paid for an SLA...

To debug, you'll probably want to compare what actual data is being sent between the working and non-working code and see what the difference is. A simple way to do that is to use netcat (e.g. on Ubuntu: apt install netcat-openbsd) and run nc -l 8080 and then send the request to http://localhost:8080`. It will echo out the request.

Compare the 2 requests and let us know what the difference is. Maybe there's some difference in cookie quoting or similar which confuses Cloudflare.

@CodingMoeButa
Copy link
Author

Yes, I agree with you that there is a difference in actual behavior between Aiohttp and others.

I have moved my business to HTTPX in recent hours. I am not calling an SLA here. It is not my obligation to guarantee the availability of Aiohttp. What do I want to do is just reporting it.

@Dreamsorcerer
Copy link
Member

Well, if you're not going to look at the issue and provide the details needed for us to fix it, then there's not much we can do...

@Dreamsorcerer Dreamsorcerer added the needs-info Issue is lacking sufficient information and will be closed if not provided label Dec 7, 2024
@Cycloctane
Copy link
Contributor

I cannot reproduce it with your script, so it may not be aiohttp's problem. I suspect it is caused by your proxy or dns. aiohappyeyeballs may prefer a different dns record compared to other http clients, which can make aiohttp connect to a host that happens to be blocking your ip.

@CodingMoeButa
Copy link
Author

I cannot reproduce it with your script, so it may not be aiohttp's problem. I suspect it is caused by your proxy or dns. aiohappyeyeballs may prefer a different dns record compared to other http clients, which can make aiohttp connect to a host that happens to be blocking your ip.

According to my tests, this problem only occurs when using Aiohttp. Other clients, including Requests, HTTPX, Chrome, Postman and cURL, work fine. It should not be related to the proxy.

Maybe because I installed Aiohttp with AioDNS. The problem might be caused by AioDNS, but I don't understand why Cloudflare says "please enable cookies".

By the way, how does aiohappyeyeballs work in Aiohttp? Will it cause some DNS leaks when using proxy? The website is a Cloudflare protected website. Though aiohappyeyeballs prefers a different dns record, but is there any difference between Cloudflare Edge Nodes?

@bdraco
Copy link
Member

bdraco commented Dec 9, 2024

DNS and aiohappyeyeballs shouldn't be a factor here as the proxy will be doing the resolution and connection decisions.

It's very likely a difference in how cookie quoting is handled or lack of partitioned cookie support

@CodingMoeButa
Copy link
Author

Because you expect your issue to be fixed in under 2 hours...? It's not like you've paid for an SLA...

To debug, you'll probably want to compare what actual data is being sent between the working and non-working code and see what the difference is. A simple way to do that is to use netcat (e.g. on Ubuntu: apt install netcat-openbsd) and run nc -l 8080 and then send the request to http://localhost:8080`. It will echo out the request.

Compare the 2 requests and let us know what the difference is. Maybe there's some difference in cookie quoting or similar which confuses Cloudflare.

Additional Information

Whether I set the param cookies for aiohttp.ClientSession() or not, it performs always 403 "please enable cookies". So I guessed the reason was how the headers are handled by Aiohttp. Unfortunately, it was difficult for me to review the internal codes of Aiohttp. In fact, I could use Wireshark or netcat or any other one to catch the request packet that Aiohttp constructed at that time.

@Cycloctane
Copy link
Contributor

I cannot reproduce it with your script, so it may not be aiohttp's problem. I suspect it is caused by your proxy or dns. aiohappyeyeballs may prefer a different dns record compared to other http clients, which can make aiohttp connect to a host that happens to be blocking your ip.

According to my tests, this problem only occurs when using Aiohttp. Other clients, including Requests, HTTPX, Chrome, Postman and cURL, work fine. It should not be related to the proxy.

Maybe because I installed Aiohttp with AioDNS. The problem might be caused by AioDNS, but I don't understand why Cloudflare says "please enable cookies".

By the way, how does aiohappyeyeballs work in Aiohttp? Will it cause some DNS leaks when using proxy? The website is a Cloudflare protected website. Though aiohappyeyeballs prefers a different dns record, but is there any difference between Cloudflare Edge Nodes?

I'm assuming this because I cannot reproduce your problem with or without a proxy... Both aiohttp and requests works well. And it is possible to have difference between ipv4 and ipv6 nodes when cf is blocking your ipv6 address while accepting ipv4.

By the way I don't think "please enable cookies" is a valid error message. It seems to be just a html class attribute used in cf page. If you try to manually trigger a rate limit or something, you can also see this in response.

@Dreamsorcerer
Copy link
Member

In fact, I could use Wireshark or netcat or any other one to catch the request packet that Aiohttp constructed at that time.

Which is what I asked for. If you can tell us the difference between a working request and a non-working one, we can figure out what is happening. Without that, there's nothing we can do here...

@CodingMoeButa CodingMoeButa closed this as not planned Won't fix, can't repro, duplicate, stale Dec 9, 2024
@Cycloctane
Copy link
Contributor

@CodingMoeButa I finally reproduced your problem and did a network traffic analysis. I believe your problem is because one of the hosts in dns records (not all of them) is blocking requests without alpn. Please try aiohttp with a custom ssl_context:

import ssl
ssl_context = ssl.create_default_context()
ssl_context.set_alpn_protocols(['http/1.1'])
ssl_context.check_hostname = False
...

async with session.get(url, headers=headers, ssl=ssl_context) as response:
    ...

@CodingMoeButa
Copy link
Author

@CodingMoeButa I finally reproduced your problem and did a network traffic analysis. I believe your problem is because one of the hosts in dns records (not all of them) is blocking requests without alpn. Please try aiohttp with a custom ssl_context:

import ssl
ssl_context = ssl.create_default_context()
ssl_context.set_alpn_protocols(['http/1.1'])
ssl_context.check_hostname = False
...

async with session.get(url, headers=headers, ssl=ssl_context) as response:
    ...

Thanks for your work.

Why does Aiohttp not set ALPN by default?

@CodingMoeButa CodingMoeButa reopened this Dec 10, 2024
@Dreamsorcerer
Copy link
Member

Because ssl.create_default_context() doesn't. It's something that has come up before though, so we should probably enable it (unless anyone knows why the ssl module doesn't do it by default?).

@Dreamsorcerer Dreamsorcerer removed the needs-info Issue is lacking sufficient information and will be closed if not provided label Dec 10, 2024
@Dreamsorcerer
Copy link
Member

For simplicity, we'll track this in #10152.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants