Requests: socket.error: [Errno 54] 피어에 μ˜ν•œ μ—°κ²° μž¬μ„€μ •

에 λ§Œλ“  2011λ…„ 09μ›” 22일  Β·  19μ½”λ©˜νŠΈ  Β·  좜처: psf/requests

ν˜„μž¬ requests.get(url, params=kwargs) μ‚¬μš©ν•  λ•Œ socket.error: [Errno 54] Connection reset by peer 였λ₯˜κ°€ λ°œμƒν•˜κ³  params 큰 ν…μŠ€νŠΈ 본문이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 두 개의 큰 ν…μŠ€νŠΈ 본문을 각각 2,900자 미만으둜 자λ₯΄λ©΄ μž‘λ™ν•©λ‹ˆλ‹€. curl μ‚¬μš©ν•˜μ—¬ λͺ…λ Ήμ€„μ—μ„œ λ™μΌν•œ get μš”μ²­μ„ μ‹€ν–‰ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€. pip install python-requests μ‚¬μš©ν•˜μ—¬ μ„€μΉ˜ν•œ μš”μ²­ 버전 0.6.1을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” python-sendgrid 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‚΄ sendgrid 계정에 λ‰΄μŠ€λ ˆν„°λ₯Ό μΆ”κ°€ν•˜κ³  있고 문제 티켓에 λ‚΄ API μ‚¬μš©μž 이름과 λΉ„λ°€λ²ˆν˜Έλ₯Ό κ²Œμ‹œν•˜κ³  싢지 μ•ŠκΈ° λ•Œλ¬Έμ— 문제λ₯Ό λ³΅μ œν•˜λΌλŠ” 말을 μ–΄λ–»κ²Œ ν•΄μ•Ό 할지

curl을 μ‚¬μš©ν•˜μ—¬ λͺ…λ Ήμ€„μ—μ„œ ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ 각각 urlencoderλ₯Ό μ‚¬μš©ν•˜μ—¬ urlencoded 일반 ν…μŠ€νŠΈμ™€ html ν…μŠ€νŠΈλ₯Ό ν¬ν•¨ν•˜λŠ” 두 개의 νŒŒμΌμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

export IDENTITY='<my identity number>'
export API_KEY='<my smtp password>'
export API_USER='<my smtp username>'
export NAME='<My Urlencoded Newsletter Name>'
export SUBJECT='<My Urlencoded Newsletter Subject>'
TEXT=`cat urlencoded.txt`; HTML=`cat urlencoded.html`; curl -d "api_user=$API_USER&api_key=$API_KEY&identity=$IDENTITY&name=$NAME&subject=$SUBJECT&text=$TEXT&html=$HTML" https://sendgrid.com/api/newsletter/newsletter/add.json

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹¬μ½€ν•œ μ•‘μ…˜! requests.get(url, params=kwargs) μ—μ„œ requests.post(url, data=kwargs) ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€! 번거둭게 ν•΄μ„œ μ£„μ†‘ν•˜κ³  λ„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

λͺ¨λ“  19 λŒ“κΈ€

흠, ν₯λ―Έλ‘­κ΅°. 그것이 λ°œμƒν•˜λŠ” 였λ₯˜λΌλ©΄, μ„œλ²„κ°€ μ‹€μ œλ‘œ 연결을 μž¬μ„€μ •ν•˜μ§€ _μ•„λ‹ˆλ‹€_라고 믿을 μ΄μœ κ°€ 거의 μ—†μŠ΅λ‹ˆλ‹€.

Charles와 같은 HTTP ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? μ‹€μ œλ‘œ 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ 밝힐 수 μžˆμŠ΅λ‹ˆλ‹€.

μ£„μ†‘ν•©λ‹ˆλ‹€. 전체 역좔적을 μ œκ³΅ν•˜λŠ” 것을 μžŠμ—ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ μ–»λŠ” μ—­μΆ”μ μž…λ‹ˆλ‹€. λ˜ν•œ HTTP ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법과 curl이 μžˆλŠ” λͺ…λ Ήμ€„μ—μ„œ μž‘λ™ν•  λ•Œ 차이가 λ‚˜λŠ” 이유λ₯Ό μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

Traceback (most recent call last):
  File "/Users/oconnor/.virtualenvs/emails/bin/django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "/Users/oconnor/.virtualenvs/emails/lib/python2.7/site-packages/django/core/management/__init__.py", line 429, in execute_from_command_line
    utility.execute()
  File "/Users/oconnor/.virtualenvs/emails/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/oconnor/.virtualenvs/emails/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/oconnor/.virtualenvs/emails/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/Users/oconnor/Sites/wenworld/emails/emails/management/commands/ww_daily_headlines_send.py", line 114, in handle
    self.add_newsletter_to_sendgrid(sendgrid_newsletter_name, NEWSLETTER_SLUG)
  File "/Users/oconnor/Sites/wenworld/emails/emails/management/commands/ww_daily_headlines_send.py", line 94, in add_newsletter_to_sendgrid
    html=email.html
  File "/Users/oconnor/.virtualenvs/emails/src/sendgrid/src/sendgrid/__init__.py", line 67, in newsletter_add
    subject=subject, text=text, html=html)
  File "/Users/oconnor/.virtualenvs/emails/src/sendgrid/src/sendgrid/__init__.py", line 157, in get
    return self.call(method, **kwargs)
  File "/Users/oconnor/.virtualenvs/emails/src/sendgrid/src/sendgrid/__init__.py", line 56, in call
    result_json = json.loads(response.content)
  File "/Users/oconnor/.virtualenvs/emails/lib/python2.7/site-packages/requests/models.py", line 429, in __getattr__
    self._content = self.read()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 351, in read
    data = self._sock.recv(rbufsize)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 553, in read
    s = self.fp.read(amt)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1276, in read
    return s + self._file.read(amt - len(s))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 380, in read
    data = self._sock.recv(left)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 219, in recv
    return self.read(buflen)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 138, in read
    return self._sslobj.read(len)
socket.error: [Errno 54] Connection reset by peer

githubμ—μ„œ λŒμ•„μ˜¨ 응닡은...

<html>
<head><title>414 Request-URI Too Large</title></head>
<body bgcolor="white">
<center><h1>414 Request-URI Too Large</h1></center>
<hr><center>nginx/0.7.65</center>
</body>
</html>

이전에 μ–ΈκΈ‰ν–ˆλ“―μ΄ curl μž‘λ™ν•˜κΈ° λ•Œλ¬Έμ— μ΄μƒν•©λ‹ˆλ‹€.

Charles(λ˜λŠ” 이와 μœ μ‚¬ν•œ)λ₯Ό 톡해 두 가지 μš”μ²­μ„ μ‚΄νŽ΄λ³΄λŠ” 데 μ‹œκ°„μ„ 듀이면 문제λ₯Ό 맀우 빨리 확인할 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.


였λ₯˜μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ Request-URIκ°€ λ„ˆλ¬΄ μ»€μ„œ μ„œλ²„κ°€ μ²˜λ¦¬ν•  수 μ—†μœΌλ―€λ‘œ 연결이 λŠμ–΄μ§‘λ‹ˆλ‹€.

μš”μ²­μ„ μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  데이터λ₯Ό GET λ§€κ°œλ³€μˆ˜λΌκ³  ν•˜λŠ” μš”μ²­ URI의 λŒ€κ·œλͺ¨ 쿼리 λ¬Έμžμ—΄λ‘œ λ³΄λƒ…λ‹ˆλ‹€. curl을 μ‚¬μš©ν•˜λŠ” 경우 양식 인코딩 데이터λ₯Ό POST 데이터라고 ν•˜λŠ” μš”μ²­ 본문에 μ—…λ‘œλ“œν•©λ‹ˆλ‹€.

requests.get(url, params=kwargs) 및 requests.post(url, params=kwargs) λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν–ˆμ§€λ§Œ λ‘˜ λ‹€ λ™μΌν•œ 였λ₯˜λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ–΄λ–€ 이유둜 CharlesλŠ” curlμ—μ„œ μš”μ²­μ„ μΊ‘μ²˜ν•˜μ§€ μ•Šκ³  python-requestsλ₯Ό μ‚¬μš©ν•˜λŠ” λ‚΄ λΈŒλΌμš°μ €μ™€ λ‚΄ python λͺ…령쀄 μŠ€ν¬λ¦½νŠΈμ—μ„œ μš”μ²­μ„ μΊ‘μ²˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

κ±±μ • 마.

params λŠ” 쿼리 λ¬Έμžμ—΄μš©μ΄κ³  data λŠ” POST λ°μ΄ν„°μš©μž…λ‹ˆλ‹€.

λ‹¬μ½€ν•œ μ•‘μ…˜! requests.get(url, params=kwargs) μ—μ„œ requests.post(url, data=kwargs) ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€! 번거둭게 ν•΄μ„œ μ£„μ†‘ν•˜κ³  λ„μ™€μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

μ „ν˜€ κ±±μ •ν•˜μ§€ λ§ˆμ„Έμš” :)

λΉ„μŠ·ν•œ λ°μ΄ν„°λ‘œ λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 것이 μ΄μƒν•©λ‹ˆλ‹€. μœ μΌν•œ 차이점은 제 κ²½μš°μ—λŠ” 큰 λͺ©λ‘μ΄λ‚˜ 맀개 λ³€μˆ˜ 크기가 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. CURL을 톡해 이루어진 λ™μΌν•œ μš”μ²­μ€ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€λ§Œ μš”μ²­μ„ 톡해 이 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

requests.exceptions.ConnectionError: HTTPSConnectionPool(host='barnea.com', port=443): URL둜 μ΅œλŒ€ μž¬μ‹œλ„ 횟수 초과: /jira/rest/api/2/group?groupname=jira-administrators&expand=users: [Errno 54] 피어에 μ˜ν•œ μ—°κ²° μž¬μ„€μ •)

더 ν₯미둜운 것은 μš”μ²­μ΄ μ›Ή μ„œλ²„μ— λ„λ‹¬ν•˜μ§€λ„ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ–΄λ–€ 원인이 될 수 μžˆμŠ΅λ‹ˆκΉŒ?

@ssbarnea 이 λ¬Έμ œλŠ” 2년이

더 λ‚˜μ€ 방법은 문제λ₯Ό 열지 말고 StackOverflow에 κ°€μ„œ μ§ˆλ¬Έμ„ ν•˜κ³  μžˆλŠ”λ° 이것이 μš”μ²­ λ™μž‘ λ°©μ‹μ˜ 문제라고 믿을 μ΄μœ κ°€ μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. StackOverflow에 λŒ€ν•œ μ„ΈλΆ€ 정보λ₯Ό ν•΄μ‹œ μ²˜λ¦¬ν•˜λ©΄ 버그 λ³΄κ³ μ„œλ₯Ό μ œμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€(ν•„μš”ν•œ 경우).

그것은 맀우 μ΄μƒν•œ 행동이며 μš”μ²­μ˜ 버그가 μ•„λ‹ˆλΌκ³  믿을 μ΄μœ κ°€ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μƒˆ 버그λ₯Ό μ—΄μ—ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μ—¬μ „νžˆ 이것을 μΌμœΌν‚¬ 수 μžˆλŠ” 원인을 μ‘°μ‚¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‚΄ μ»΄ν“¨ν„°μ—μ„œλ§Œ λ°œμƒν•˜μ§€λ§Œ κ°€μž₯ ν₯미둜운 뢀뢄은 CURL이 μž‘λ™ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€(λΈŒλΌμš°μ €λ„ λ§ˆμ°¬κ°€μ§€). κ°μ‚¬ν•©λ‹ˆλ‹€.

이것을 여기에 λ‘μ–΄μ„œ μ£„μ†‘ν•˜μ§€λ§Œ 원인을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

#  resolver 127.0.0.1;
#  ssl_protocols TLSv1.2 TLSv1.1 ; # TLSv1
#  ssl_stapling on;
#  ssl_stapling_verify on;
#  ssl_session_cache builtin:1000;
#  ssl_session_timeout 30m;
#  ssl_ciphers HIGH:!RC4:!aNULL:!MD5;
#  ssl_prefer_server_ciphers on;

nginx μ„œλ²„μ—μ„œ μ΄λŸ¬ν•œ 쑰정을 λΉ„ν™œμ„±ν™”ν•˜λ©΄ μš”μ²­κ³Ό ν•¨κ»˜ μž‘λ™ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€. λΆ„λͺ…νžˆ κ·Έ 쀑 ν•˜λ‚˜κ°€ μ˜€μž‘λ™μ„ μΌμœΌν‚€λŠ” κ²ƒμž…λ‹ˆλ‹€.

@ssbarnea
#1567(및 κ·Έ 이상)에 μ„€λͺ…λœ κ²ƒμ²˜λŸΌ νŠΉμ • SSL/TLS λ²„μ „μ—μ„œ 말할 λ•Œ 잘λͺ»λœ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 버그가 μžˆλŠ” μ„œλ²„μΌ κ°€λŠ₯성이 ν½λ‹ˆλ‹€.
μ—¬κΈ° 에 μ„€λͺ…λœ κ²ƒμ²˜λŸΌ λ‹€λ₯Έ 버전을 κ°•μ œ μ‹€ν–‰ν•΄ λ³΄μ‹­μ‹œμ˜€(@Lukasaμ—κ²Œ 더 λ§Žμ€ 찬사).

그리고 승자(패자)λŠ” ssl_protocols TLSv1.2 TLSv1.1;
μ„œλ²„μ—μ„œ μ§€μ›λ˜λŠ” ν”„λ‘œν† μ½œμ—μ„œ TLSv1 λ₯Ό μ œκ±°ν•˜λ©΄ μš”μ²­μ΄ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

이제 μš”μ²­μ΄λ‚˜ κΈ°λ³Έ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 이것을 버그라고 λΆ€λ₯Ό 수 μžˆμŠ΅λ‹ˆκΉŒ?

μ°Έκ³ : λ³΄μ•ˆ 문제둜 인해 TLSv1을 μ œκ±°ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ•…μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€.

@ssbarnea μ œν•œ 사항이 μš”μ²­μ΄ μ•„λ‹ˆλΌ Python에 μžˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ μ œκ³΅λ˜λŠ” Python 버전은 μ—¬κΈ° ν‘œ

Python 3.4(아직 μ œκ³΅λ˜μ§€ μ•ŠμŒ, Requestsκ°€ ν˜Έν™˜λœλ‹€λŠ” 보μž₯ μ—†μŒ)μ—μ„œλŠ” TLS1.2 및 TLS1.1을 μ§€μ›ν•˜λ―€λ‘œ μ‹œλ„ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ TLSv1이 μš”μ²­μ„ ν†΅κ³Όν•˜λ„λ‘ ν—ˆμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ—¬μ „νžˆ μ΄μƒν•œ 점이 μžˆμŠ΅λ‹ˆλ‹€. 두 경우 λͺ¨λ‘ Python을 μ‚¬μš©ν–ˆλŠ”λ° OS Xμ—μ„œ ν…ŒμŠ€νŠΈν•  λ•ŒλŠ” μ‹€νŒ¨ν–ˆκ³  Ubuntuμ—μ„œ ν…ŒμŠ€νŠΈν–ˆμ„ λ•ŒλŠ” μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.

일반적으둜 SSL의 κΈ°λ³Έ 섀정은 κ±΄λ“œλ¦¬μ§€ μ•Šμ§€λ§Œ SSL λ³΄κ³ μ„œλ₯Ό μ‹€ν–‰ν•˜κ³  λŒ€λΆ€λΆ„μ˜ κ²½κ³ λ₯Ό ν•΄κ²°ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€.

FIPS μš”κ΅¬ 사항: SSL v2 및 SSL v3 λΉ„ν™œμ„±ν™”(TLS 버전 ν”„λ‘œν† μ½œλ§Œ μ‚¬μš©)
BEAST 곡격에 λŒ€ν•΄μ„œλ„ μ½μ–΄λ³΄μ‹­μ‹œμ˜€.

μ—¬κΈ°μ—μ„œ ν™•μΈν•˜μ‹­μ‹œμ˜€:
https://sslcheck.globalsign.com/en_US/sslcheck/?host=sbarnea.com

κ·Έλž˜μ„œ 이것을 κ³ μΉ  수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. λΆ„λͺ…νžˆ Ubuntu의 Pythonκ³Ό ν•¨κ»˜ μž‘λ™ν•œλ‹€λ©΄ λͺ¨λ“  Python 버전에 κ΅­ν•œλ  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

음, μŠ¬ν”„κ²Œλ„ 그럴 수 μžˆμŠ΅λ‹ˆλ‹€. ssl μ§€μ›μ˜ μƒλŒ€μ  κΈ°λŠ₯은 μ„€μΉ˜ν•œ OpenSSL 버전에 따라 λ‹€λ¦…λ‹ˆλ‹€. 두 버전을 λΉ„κ΅ν•˜μ‹­μ‹œμ˜€. =)

μ£Όμ œμ— λŒ€ν•΄ μ•½κ°„μ˜ 마무리λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ›Ή μ„œλ²„κ°€ TLSv1을 ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ©΄ Python 2.7.9κ°€ ν¬ν•¨λœ TLSv1.1 및 1.2λ₯Ό λ°›κ²Œ λ©λ‹ˆλ‹€(2014λ…„ 12μ›” μ˜ˆμ •). κ·ΈλŸ¬λ‚˜ PYOpenSSL을 μ„€μΉ˜ν•˜κ³  이λ₯Ό urrlib3(http://urllib3.readthedocs.org/en/latest/security.html#openssl-pyopenssl)에 μ‚½μž…ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Pythonμ—μ„œ TLSv1을 λΉ„ν™œμ„±ν™”ν•œ μ›Ή μ„œλ²„μ— λŒ€ν•œ μš”μ²­μ„ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 2.7.6(그리고 μ•„λ§ˆλ„ λ‹€λ₯Έ 것듀).

import urllib3.contrib.pyopenssl
urllib3.contrib.pyopenssl.inject_into_urllib3()

κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œ μ›Ή μ„œλ²„λŠ” μ‚¬λžŒλ“€μ΄ 이 λ§Žμ€ μ΄μƒν•œ 고리λ₯Ό κ±΄λ„ˆλ›°λ„λ‘ κ°•μš”ν•˜λŠ” 무언가λ₯Ό λΉ„μΆ”μ²œν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

eromoe picture eromoe  Β·  3μ½”λ©˜νŠΈ

avinassh picture avinassh  Β·  4μ½”λ©˜νŠΈ

remram44 picture remram44  Β·  4μ½”λ©˜νŠΈ

cnicodeme picture cnicodeme  Β·  3μ½”λ©˜νŠΈ

jake491 picture jake491  Β·  3μ½”λ©˜νŠΈ