python : encoding with 'idna' codec failed(UnicodeError: label empty or too long)

แนะนำ สอบถาม ภาษา C สำหรับผู้เริ่มต้น ภาษา Java ภาษา Python

Moderators: mindphp, ผู้ดูแลกระดาน

User avatar
chakirin.bfds
PHP Super Hero Member
PHP Super Hero Member
Posts: 783
Joined: 22/12/2020 10:19 am

python : encoding with 'idna' codec failed(UnicodeError: label empty or too long)

Post by chakirin.bfds »

กำลังเขียน Python เพื่อตรวจเช็คเว็บไซต์(url) ว่าสามารถใช้งานได้หรือไม่ ซึ่งเมื่อลองทดสอบ url โดยตัด www. ออก
เช่น

จาก
https:// www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B ... enants.htm

เป็น
https:// .mindphp.com/%E0%B8%9A%E0%B8%97%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1/31-%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%97%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%84%E0%B8%9B/8029-should-you-calculate-vat-with-tenants.html


โปรแกรมจะแจ้ง error
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
UnicodeError: encoding with 'idna' codec failed (UnicodeError: label empty or too long)
  • อันนี้เป็น error ที่เกิดจาก "ไม่ใช่อักขระชื่อโดเมนที่ถูกต้อง" หรือเปล่าครับ ?
  • มีวิธีแก้ไข error นี้มั้ยครับ หรือสามารถตั้งเป็นข้อยกเว้น except UnicodeError ได้เลยมั้ยครับ
User avatar
chakirin.bfds
PHP Super Hero Member
PHP Super Hero Member
Posts: 783
Joined: 22/12/2020 10:19 am

Re: python : encoding with 'idna' codec failed(UnicodeError: label empty or too long)

Post by chakirin.bfds »

นี่เป็น code ในการตรวจเช็ค url ที่ผมทำอยู่ครับ

Code: Select all


#!/usr/bin/python
# -*- coding: utf-8 -*-

#method1
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

import configparser
import time
import email
import smtplib

con = None
config = configparser.ConfigParser()
config.read('admin.conf')

SMTP=config['options']['SMTP']
ports=config['options']['ports']
user = config['options']['user']
password = config['options']['password']
sender = config['options']['sender']
recipient = config['options']['recipient_email']

r_link= open('check_link.txt',"r")
plt = open("plateformEmail.txt")
plt = plt.read()

save_link = []
check = []


timeis = time.localtime()
time_hr = timeis.tm_hour
time_min = timeis.tm_min
time_sec = timeis.tm_sec
s_t = time.ctime()


#loop read link in file
n = 0
nu=1
print("Start_test:", s_t)
for line in r_link:
    print("line:",nu)

    nu+=1
    line=line.lstrip()
    line=line.replace(" ", "")
    if line =="":
        print("This line no url to test")
        pass

# check link method1
    else:
        n += 1
        try:
            response = urlopen(line)

        except HTTPError as e:
            print('The server couldn\'t fulfill the request.', line)
            print('Error code: ', e.code)
            e.code = str(e.code)
            save_link.append(
                str(n) + " " + 'The server couldn\'t fulfill the request ' + '(' + e.code + ')' + ' :' + line)
            check.append("N")
        except URLError as e:
            print('We failed to reach a server.', line)
            print('Reason: ', e.reason)
            save_link.append(str(n) + " " + 'We failed to reach a server. :' + line )
            check.append("N")

        else:
            print('Website is working fine', line)
            save_link.append(str(n) + " " + 'Website is working fine. :' + line)
            check.append("Y")
User avatar
thatsawan
PHP VIP Members
PHP VIP Members
Posts: 28524
Joined: 31/03/2014 10:02 am
Contact:

Re: python : encoding with 'idna' codec failed(UnicodeError: label empty or too long)

Post by thatsawan »

chakirin.bfds wrote: 01/02/2021 12:30 pm กำลังเขียน Python เพื่อตรวจเช็คเว็บไซต์(url) ว่าสามารถใช้งานได้หรือไม่ ซึ่งเมื่อลองทดสอบ url โดยตัด www. ออก
เช่น

จาก
https:// www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B ... enants.htm

เป็น
https:// .mindphp.com/%E0%B8%9A%E0%B8%97%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1/31-%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%97%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%84%E0%B8%9B/8029-should-you-calculate-vat-with-tenants.html
ตัดผิดหรือป่าว ข้างบน ออกตัด www.
ผลลัพ จะต้องเป็น https://mindphp.com
ซึ่งมันก็จะเข้าใช้งานได้ปกติ เหมือนมี www.
User avatar
chakirin.bfds
PHP Super Hero Member
PHP Super Hero Member
Posts: 783
Joined: 22/12/2020 10:19 am

Re: python : encoding with 'idna' codec failed(UnicodeError: label empty or too long)

Post by chakirin.bfds »

thatsawan wrote: 02/02/2021 10:32 am
chakirin.bfds wrote: 01/02/2021 12:30 pm กำลังเขียน Python เพื่อตรวจเช็คเว็บไซต์(url) ว่าสามารถใช้งานได้หรือไม่ ซึ่งเมื่อลองทดสอบ url โดยตัด www. ออก
เช่น

จาก
https:// www.mindphp.com/%E0%B8%9A%E0%B8%97%E0%B ... enants.htm

เป็น
https:// .mindphp.com/%E0%B8%9A%E0%B8%97%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1/31-%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%97%E0%B8%B1%E0%B9%88%E0%B8%A7%E0%B9%84%E0%B8%9B/8029-should-you-calculate-vat-with-tenants.html
ตัดผิดหรือป่าว ข้างบน ออกตัด www.
ผลลัพ จะต้องเป็น https://mindphp.com
ซึ่งมันก็จะเข้าใช้งานได้ปกติ เหมือนมี www.
ok ได้เเล้วครับ
ผมคิดว่าน่าจะไม่ได้ลบจุดออกไปด้วย เลยทำให้โปรแกรมไม่สามารถอ่าน url ได้อย่างถูกต้องครับ
ผมได้ใส่ code นี่เพื่อกันโปรแกรมหยุดทำงานด้วยเเล้วครับ

Code: Select all

        except UnicodeError as e:
            print('link is not a valid domain name character ', link)
            print('Reason: ', e)
Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Programming - C/C++ & java & Python”

Who is online

Users browsing this forum: No registered users and 8 guests