/ localhostへの/ python httplibタイムアウト - python、node.js、timeout、httplib

localhostへのpython httplibタイムアウト - python、node.js、timeout、httplib

ローカルサーバーをポート6868で実行しています。 技術的には、node.js駆動のマイクロサイトで、expressを使用して構築されています。実際には、1つの「/ push」コンストーラがデータの読み取りとコンソールへの書き込みを行います

カールを使用する場合

h100:~ eugenemirotin$ curl -i http://127.0.0.1:6868/push -d password=pwd
HTTP/1.1 200 OK
X-Powered-By: Express
Connection: keep-alive
Transfer-Encoding: chunked

そして、node.jsは想定通りコンソールになります

pythonとhttplibを使用する場合

h100:~ eugenemirotin$ python
Python 2.7.1 (r271:86832, Jan  6 2011, 00:55:07)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import httplib, urllib
>>> params = {"password": "pwd", "type": "msg", "channel": "chat", "client_id": "", "body": {"text": "test test"}}
>>> params
{"body": {"text": "test test"}, "password": "pwd", "type": "msg", "client_id": "", "channel": "chat"}
>>> params = urllib.urlencode(params)
>>> params
"body=%7B%27text%27%3A+%27test+test%27%7D&password=pwd&type=msg&client_id=&channel=chat"
>>> conn = httplib.HTTPConnection("http://127.0.0.1:6868")
>>> conn.request("POST", "/push", params)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File    "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 941, in request
self._send_request(method, url, body, headers)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 975, in _send_request
self.endheaders(body)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 937, in endheaders
self._send_output(message_body)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 797, in _send_output
self.send(msg)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 759, in send
self.connect()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 740, in connect
self.timeout, self.source_address)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 571, in create_connection
raise err
socket.error: [Errno 60] Operation timed out
>>> quit()

パラメータの違いは重要ではありません - リクエストはnode.jsサーバーにも届きません。

それはhttplibのバグですか、それとも私は何か悪いことをしていますか?

回答:

回答№1は4

削除する http:// アドレスから。

この:

conn = httplib.HTTPConnection("http://127.0.0.1:6868")

する必要があります:

conn = httplib.HTTPConnection("127.0.0.1:6868")

回答№2の場合は3

あなたはあなたのコードを非常に単純化することができます:

import urllib, urllib2
params = {"password": "pwd", "type": "msg", "channel": "chat", "client_id": "", "body": {"text": "test test"}}
params = urllib.urlencode(params)
res = urllib2.urlopen("http://127.0.0.1:6868/push/", params)
data = res.read()
res.close()