2017-09-16 14 views
0

私は、HTTPプロトコルを使用してソケットに接続し、URLを取得するためにpythonを使用する方法を学んでいます。誰かが私が間違っているかもしれない箇所を指摘するのに役立つことができますか?ソケットに接続しようとしてエラーが発生しました

Pythonのコード:

# Networking 
## Connect to a Socket 
import socket 
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
mysock.connect(('data.pr4e.org', 80)) # Host, Port Number 

cmd = 'GET http://data.pr4e.org/intro-short.txt HTTP/1.0\r\n\r\n'.encode() 
mysock.send(cmd) 

while TRUE: 
    data = mysock.recv(512) 
    if (len(data)<1): 
     break 
    print(data.decode()) 
mysock.close() 

私は、Windows 10のコマンドプロンプト上でプログラムを実行します。

C:\Users\Kane\Desktop>python networking.py 

私は、次のエラーメッセージが出ます:

Traceback (most recent call last): 
    File "networking.py", line 7, in <module> 
    mysock.connect(('data.pr4.org', 80)) # Host, Port Number 
    File "C:\Users\Kane\Anaconda2\lib\socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
socket.gaierror: [Errno 11001] getaddrinfo failed 

感謝を。

+0

は "data.pr4.org"に接続する有効なサーバーですか? – coder

+0

実際のエラーを知ることができたのは、どのタイプの例外であるかをPythonに尋ねます:印刷タイプ(例外)を持つtry&catch文 –

+2

DNSで解決できないホスト名を使用する以外に、HTTP要求は有効なHTTP要求ではありませんHTTP/1.0が厳密にそれを必要としないにもかかわらず、今日はほとんどの場合、今日必要とされているHostヘッダを見逃してしまうからです。これを行う上位レベルのライブラリの代わりに実際にHTTPプロトコルを使用したい場合は、プロトコルを推測せずに、書面による標準を調べるか、または適切に実装されたクライアントによって行われた既存のHTTPトラフィックを確認してください。 –

答えて

0

@ t.m.adamが正しいと分かった。

TRUEをTrueにする必要がある以外は、コードは正常に動作します。

以前はホストまたはサーバーの問題でした。他の人が同じ出力を得ることができる場合は、私はその質問を削除します:

C:\Users\Kane\Desktop>python networking.py 
HTTP/1.1 200 OK 
Date: Sun, 17 Sep 2017 00:12:07 GMT 
Server: Apache/2.4.7 (Ubuntu) 
Last-Modified: Sat, 13 May 2017 11:22:22 GMT 
ETag: "1d3-54f6609240717" 
Accept-Ranges: bytes 
Content-Length: 467 
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 
関連する問題