首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码错误当试图编码解码get请求,练习从PY4E课程,在wsl脚本将正确运行并打印出romeo.txt。

编码错误当试图编码解码get请求,练习从PY4E课程,在wsl脚本将正确运行并打印出romeo.txt。
EN

Stack Overflow用户
提问于 2022-11-14 02:51:07
回答 1查看 20关注 0票数 0
代码语言:javascript
复制
import socket
mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org',80))
cmd='GET http://data.pr4e.org/romeo.txt HTTP/1.0\n\n'.encode()
mysock.send(cmd)

while True:
    data=mysock.recv(512)
    if len(data)<1:
        break
    print(data.decode('utf-8'),end="")
mysock.close

这是py4e课程中的一个示例脚本。当我运行它时,我得到的只是一些胡言乱语和一些HTML内容。一开始,我没有得到所有这些信息的编码错误。再也不知道为什么了。

当我在WSL (windows子系统)上运行脚本时,它正确地运行并获取文件。

这是Windows中在VSCode上运行的脚本的输出:

yIGBGB75Zrr/vgCUAHz/viy/L+qoZ+rrkHeyAH8nfGCASD+Aj6Op/73wtHFtgEOutAAAAEAEv/nA5MESAATACxAFwMPAAkPEQQUFQIRExFGWRMPDAVGWQwWAD8rABg/K

代码语言:javascript
复制
     }

        .container {
            margin: 0 auto;
            padding: 24px 0;
            max-width: 800px;
            width: 100%;
        }

        .alert {
            border: 4px solid #F88A1B;
            background-color: #FFEDD0;
            padding: 50px;
            display: flex;
            justify-content: flex-start;
        }

        .container_image {
            margin-right: 24px;
            height: 43px;
        }

        .container_text {
            display: inline-block;
            width: 80%;
            padding-left: 15px;

            @media (max-width: 660px) {
                width: 100%;
            }
        }

        .malicious-download-b {
            color: #3D3C40;
            font-family: 'Kievit Regular';
            font-size: 28px;
            letter-spacing: 0;
            line-height: 34px;
            margin-top: 0;
            margin-bottom: 12px;
            line-height: 34px;
        }

        .url-https-ask-com {
            height: 24px;
            width: 422px;
            color: #555C64;
            font-family: "Open Sans";
            font-size: 16px;
            letter-spacing: 0;
            line-height: 24px;
        }

        .url-bold {
            height: 24px;
            color: #555C64;
            font-family: "Open Sans";
            font-size: 16px;
            letter-spacing: 0;
            line-height: 24px;
            font-weight: bold;
        }

        .this-download-is-pot {
            height: 48px;
            width: 552px;
            color: #3D3C40;
            font-family: "Open Sans";
            font-size: 16px;
            letter-spacing: 0;
            line-height: 24px;
            display: inline;
        }

        .security-warning {
            color: #3D3C40;
            font-family: "Open Sans";
            font-size: 16px;
            letter-spacing: 0;
                        margin-top: 4px;
        }

        .img {
            vertical-align: middle;
            display: inline-block;
            padding-right: 10px;
            height: 35px;
                        width: 100px;
        }

        .logo {
            padding-bottom: 24px;
            display: flex;
            align-items: center;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="logo">
            <svg version="1.1" class="img" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
                viewBox="0 0 141 45.667" enable-background="new 0 0 141 45.667" xml:space="preserve">
                    <path fill="#E11F27" d="M45.479,43.972c0,0.601-0.486,1.09-1.089,1.09H1.942c-0.601,0-1.088-0.489-1.088-1.09V1.525
                        c0-0.602,0.487-1.09,1.088-1.09H44.39c0.603,0,1.089,0.488,1.089,1.09V43.972z"/>
                    <path fill="#FFFFFF" d="M36.237,25.981l-0.074-0.081l-2.46,2.336c0.654,0.688,0.625,1.776-0.065,2.428
                        c-0.688,0.652-1.776,0.625-2.43-0.062c-0.079-0.071-0.153-0.147-0.22-0.226c0,0-4.012-4.231-6.619-6.979l9.03-8.57
                        c-5.642-5.314-14.494-5.548-20.016-0.205c-5.52,5.343-6.204,13.995-1.002,20.151l9.493-9.008l6.971,7.348    
                        c0.971,0.922,2.319,1.418,3.708,1.376c1.299-0.037,2.439-0.571,3.296-1.38c1.039-0.979,1.661-2.364,1.65-3.76
                        C37.487,27.883,36.931,26.762,36.237,25.981z M27.733,15.662L13.509,29.159C8.72,20.693,18.744,10.549,27.733,15.662z"/>
                    <g>
                        <path d="M78.64,36.59l-3.29-9.946H64.686l-3.328,9.946h-2.572l9.53-28.098h3.517l9.492,28.098H78.64z M71.379,14.921
                            c-0.492-1.437-0.87-2.799-1.21-4.349h-0.265c-0.378,1.55-0.756,2.912-1.21,4.349l-3.252,9.416h9.113L71.379,14.921z"/>
                        <path d="M91.992,36.59h-3.441l-7.072-20.535h2.685l4.613,13.879c0.567,1.739,1.021,3.327,1.475,4.953h0.075 
                            c0.492-1.626,0.908-3.176,1.475-4.953l4.575-13.879h2.685L91.992,36.59z"/>
                        <path d="M103.981,12.047V7.358h2.533v4.689H103.981z M103.981,36.59V16.055h2.495V36.59H103.981z"/>        
                        <path d="M115.894,19.648V36.59h-2.42V16.055h2.42v1.664c2.42-1.739,5.333-2.193,7.715-2.193v2.231
                            C121.339,17.757,118.163,18.287,115.894,19.648z"/>
                        <path d="M138.472,36.59v-1.475c-1.437,0.87-3.782,1.966-6.845,1.966c-4.008,0-6.127-1.815-6.127-5.899v-0.568
                            c0-5.219,3.365-6.277,9.379-6.277h3.478v-1.739c0-4.009-0.869-4.954-5.446-4.954c-2.004,0-3.705,0.151-6.013,0.416v-1.815
                            c1.929-0.341,3.554-0.719,6.202-0.719c6.543,0,7.753,2.231,7.753,7.072V36.59H138.472z M138.358,26.266h-3.478
                            c-4.955,0-6.921,0.681-6.921,4.348v0.719c0,2.836,1.588,3.819,4.159,3.819c2.571,0,5.106-1.135,6.24-1.853V26.266z"/>
                    </g>
                </svg>
            <span id="translate_securityWarning" class="security-warning"> - Security Warning</span>
        </div>

        <div class="alert">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="64px" height="56px">
                <g fill="none" fill-rule="nonzero">
                    <path fill="#FF9F01"
                        d="M15.86 13.47L8.84 1.488A.975.975 0 0 0 8 1a.975.975 0 0 0-.84.488L.14 13.47c-.182.312-.187.7-.013 1.017.174.317.5.513.853.513h14.04c.353 0 .68-.196.853-.513a1.035 1.035 0 0 0-.014-1.017z" />
                    <path fill="#FFF"
                        d="M8.005 11.4c.429 0 .795.364.795.8 0 .426-.366.8-.795.8a.803.803 0 0 1-.805-.8c0-.436.345-.8.805-.8zm0-6.4c.43 0 .795.24.795.665 0 1.296-.154 3.16-.154 4.456 0 .337-.376.479-.64.479-.354 0-.652-.142-.652-.48 0-1.296-.154-3.159-.154-4.455 0-.425.353-.665.805-.665z" />
                </g>
            </svg>

            <div class="container_text">
                <p id="translate_blockedDomain" class="malicious-download-b">Blocked domain</p>
                <p><span id="translate_url" class="url-bold">URL:</span><span id="threatUrl" class="url-https-ask-com">  </span></p>
                <p class="this-download-is-pot">
                    <span id="translate_blacklistedDomain">This is a blacklisted domain in your antivirus settings.</span>       
                    <br />
                    <span id="translate_accessUnblock">To access it, unblock the domain.</span>
                </p>
            </div>
        </div>
    </div>
    <script>
                /* Polyfill - String.prototype.startsWith */
                if (!String.prototype.startsWith) {
                        Object.defineProperty(String.prototype, 'startsWith', {
                                value: function(search, rawPos) {
                                        var pos = rawPos > 0 ? rawPos|0 : 0;
                                        return this.substring(pos, pos + search.length) === search;
                                }
                        });
                }

        /* Polyfill - Array.prototype.forEach */
                if (!Array.prototype['forEach']) {
                  Array.prototype.forEach = function(callback, thisArg) {

                        if (this == null) { throw new TypeError('Array.prototype.forEach called on null or undefined'); }        

                        var T, k;
                        var O = Object(this);
                        var len = O.length >>> 0;

                        if (typeof callback !== "function") { throw new TypeError(callback + ' is not a function'); }

                        if (arguments.length > 1) { T = thisArg; }

                        k = 0;
                        while (k < len) {
                          var kValue;
                          if (k in O) {
                                kValue = O[k];
                                callback.call(T, kValue, k, O);
                          }
                          k++;
                        }
                  };
                }

        /* Polyfill - NodeList.prototype.forEach */
                if (window.NodeList && !NodeList.prototype.forEach) {
                   NodeList.prototype.forEach = Array.prototype.forEach;
                }

                var supportedLanguages = ["en", "de", "es", "fr", "it", "ja", "nl", "pt", "ru", "tr", "zh-CN", "zh-TW"];
                var browserLang = navigator.language;
                var tempLang = "";
                if (browserLang == "zh-TW")
                {
                        tempLang = browserLang;
                }
                else if (browserLang.startsWith("zh"))
                {
                        tempLang = "zh-CN";
                }
                else
                {
                        tempLang = browserLang.split('-')[0];
                }

                var translationLang = "en"; //default;
                supportedLanguages.forEach(function(supportedLanguage) {
                        if(supportedLanguage == tempLang)
                        {
                                translationLang = tempLang;
                        }
                });

                var urlString = "";

                var translations = {
                        "en_translate_securityWarning": " - Security Warning",
                        "de_translate_securityWarning": " - Sicherheitswarnung",
                        "es_translate_securityWarning": " - Aviso de seguridad",
                        "fr_translate_securityWarning": " - Avertissement de sécurité",
                        "it_translate_securityWarning": " - Avviso di sicurezza",
                        "ja_translate_securityWarning": " - セキュリティの警告",
                        "nl_translate_securityWarning": " - Beveiligingswaarschuwing",
                        "pt_translate_securityWarning": " - Aviso de segurança",
                        "ru_translate_securityWarning": " - Предупрежд. безопасности",
                        "tr_translate_securityWarning": " - Güvenlik Uyarısı",
                        "zh-CN_translate_securityWarning": " - 安全警告",
                        "zh-TW_translate_securityWarning": " - 安全警告",

                        "en_translate_blockedDomain": "Blocked domain",
                        "de_translate_blockedDomain": "Domain blockiert",
                        "es_translate_blockedDomain": "Dominio bloqueado",
                        "fr_translate_blockedDomain": "Domaine bloqué",
                        "it_translate_blockedDomain": "Dominio bloccato",
                        "ja_translate_blockedDomain": "ブロックされたドメイン",
                        "nl_translate_blockedDomain": "Geblokkeerd domein",
                        "pt_translate_blockedDomain": "Domínio bloqueado",
                        "ru_translate_blockedDomain": "Заблокирован домен",
                        "tr_translate_blockedDomain": "Engellenen etki alanı",
                        "zh-CN_translate_blockedDomain": "已阻止的域",
                        "zh-TW_translate_blockedDomain": "封鎖的網域",

                        "en_translate_url": "URL:",
                        "de_translate_url": "URL:",
                        "es_translate_url": "URL:",
                        "fr_translate_url": "URL:",
                        "it_translate_url": "URL:",
                        "ja_translate_url": "URL:",
                        "nl_translate_url": "URL:",
                        "pt_translate_url": "URL:",
                        "ru_translate_url": "URL:",
                        "tr_translate_url": "URL:",
                        "zh-CN_translate_url": "URL:",
                        "zh-TW_translate_url": "URL:",

                        "en_translate_blacklistedDomain": `<b>${urlString}</b> is a blocked domain in your antivirus settings.`, 
                        "de_translate_blacklistedDomain": `<b>${urlString}</b> wird aufgrund Ihrer Antivirus-Einstellungen immer blockiert.`,
                        "es_translate_blacklistedDomain": `<b>${urlString}</b> es un dominio bloqueado en la configuración de tu antivirus.`,
                        "fr_translate_blacklistedDomain": `<b>${urlString}</b> est un domaine bloqué dans les paramètres de votre antivirus.`,
                        "it_translate_blacklistedDomain": `<b>${urlString}</b> è un dominio bloccato nelle tue impostazioni antivirus.`,
                        "ja_translate_blacklistedDomain": `<b>${urlString}</b> はアンチウイルスの設定でブロックされたドメインです。`,
                        "nl_translate_blacklistedDomain": `<b>${urlString}</b> is een geblokkeerd domein in uw antivirusinstellingen.`,
                        "pt_translate_blacklistedDomain": `<b>${urlString}</b> é um domínio bloqueado nas configurações do seu antivírus.`,
                        "ru_translate_blacklistedDomain": `<b>${urlString}</b> - заблокированный домен, заданный в параметрах антивируса.`,
                        "tr_translate_blacklistedDomain": `<b>${urlString}</b> etki alaný, antivirüs ayarlarýnýzýn engellenenler listesinde.`,
                        "zh-CN_translate_blacklistedDomain": `<b>${urlString}</b> 是您的杀毒设置中已阻止的域。`,
                        "zh-TW_translate_blacklistedDomain": `在防病毒軟體設定中, <b>${urlString}</b> 是一個封鎖的網域。`,      

                        "en_translate_accessUnblock": "To access it, unblock the domain.",
                        "de_translate_accessUnblock": "Um die Seite zu besuchen, entfernen Sie den entsprechenden Eintrag.",     
                        "es_translate_accessUnblock": "Para acceder a él, desbloquea el dominio.",
                        "fr_translate_accessUnblock": "Pour y accédez, débloquez-le.",
                        "it_translate_accessUnblock": "Per accedervi, sblocca il dominio.",
                        "ja_translate_accessUnblock": "アクセスするには、ドメインのブロックを解除します。",
                        "nl_translate_accessUnblock": "Deblokkeer het domein voor toegang.",
                        "pt_translate_accessUnblock": "Desbloqueie o domínio para poder acessar.",
                        "ru_translate_accessUnblock": "Чтобы зайти на этот домен, разблокируйте его.",
                        "tr_translate_accessUnblock": "Erişmek için etki alanının engelini kaldırın.",
                        "zh-CN_translate_accessUnblock": "要访问它,请解除对域的阻止。",
                        "zh-TW_translate_accessUnblock": "欲對其進行存取,請解除封鎖該網域。",
                };

                var translation_elements = document.querySelectorAll('*[id^="translate_"]');
                translation_elements.forEach(function(transItem) {
                                if (transItem.id == "translate_title")
                {
                    var key = translationLang + "_" + "translate_securityWarning";
                                    var translation = translations[key];
                    if (translation)
                    {
                        transItem.innerHTML = "Avira" + translation;
                    }
                }
                else
                {
                                    var key = translationLang + "_" + transItem.id;
                                    var translation = translations[key];
                    if (translation)
                    {
                        transItem.innerHTML = translation;
                    }
                }
                        });
    </script>
</body>
</html>

在WSL中,我运行python3.8。在Windows中,我使用python3.9,在Windows中使用pyenv安装了3.8,但仍然没有。

我猜这跟编码和解码有关,但我不知道是怎么回事。

我还尝试在encode方法中设置utf-8,但是它没有改变任何事情。

EN

回答 1

Stack Overflow用户

发布于 2022-11-14 03:27:00

您需要遵循HTTP协议,并使用\r\n作为行尾。

代码语言:javascript
复制
import socket

mysock=socket.socket()
mysock.connect(('data.pr4e.org', 80))
with mysock:
    cmd = b'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'
    mysock.sendall(cmd)
    data=mysock.recv(4096)
    print(data.decode())

输出:

代码语言:javascript
复制
HTTP/1.1 200 OK
Date: Mon, 14 Nov 2022 03:29:15 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Sat, 13 May 2017 11:22:22 GMT
ETag: "a7-54f6609245537"
Accept-Ranges: bytes
Content-Length: 167
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Connection: close
Content-Type: text/plain

But soft what light through yonder window breaks
It is the east and Juliet is the sun
Arise fair sun and kill the envious moon
Who is already sick and pale with grief
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74426470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档