2013-10-13 124 views
0

我使用計算器this後的代碼unshorten網址...無法解開bit.ly網址?

import httplib 
import urlparse 

def unshorten_url(url): 
    parsed = urlparse.urlparse(url) 
    h = httplib.HTTPConnection(parsed.netloc) 
    resource = parsed.path 
    if parsed.query != "": 
     resource += "?" + parsed.query 
    h.request('HEAD', resource) 
    response = h.getresponse() 
    if response.status/100 == 3 and response.getheader('Location'): 
     return unshorten_url(response.getheader('Location')) # changed to process chains of short urls 
    else: 
     return url 

所有縮短鏈接bit.ly的新創建的URL unshortned「CEPT。

我得到這個錯誤:

>>> unshorten_url("bit.ly/1atTViN") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 7, in unshorten_url 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 955, in request 
    self._send_request(method, url, body, headers) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 989, in _send_request 
    self.endheaders(body) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 951, in endheaders 
    self._send_output(message_body) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 811, in _send_output 
    self.send(msg) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 773, in send 
    self.connect() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 754, in connect 
    self.timeout, self.source_address) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 571, in create_connection 
    raise err 
socket.error: [Errno 61] Connection refused 

是怎麼回事?

+0

downvote最初發布的答案,收到6 upvotes – sirvon

+0

@ user2799617:然後downvote原來的,而不是這個問題。 –

+0

http://www.ankitpanda.com/tweeting-with-python/,但我已經嘗試過另一個網址以及... youtube.com/watch?v=eeAjkbNq4xI – sirvon

回答

3

你忘了包括URL方案:

unshorten_url("http://bit.ly/1atTViN") 

注意http://那裏,那是重要。沒有它,網址是不正確解析:

>>> import urlparse 
>>> urlparse.urlparse('bit.ly/1atTViN') 
ParseResult(scheme='', netloc='', path='bit.ly/1atTViN', params='', query='', fragment='') 
>>> urlparse.urlparse('http://bit.ly/1atTViN') 
ParseResult(scheme='http', netloc='bit.ly', path='/1atTViN', params='', query='', fragment='') 

查看如何當不包括http://netloc參數爲空;你最終試圖連接到你自己的機器,而你沒有運行網絡服務器,因此連接被拒絕。

+0

哇!非常感謝你。非常有意義。 – sirvon

0

可能bit.ly拒絕來自httplib等工具的連接。你可以嘗試改變用戶代理是這樣的:

h.putheader('User-Agent','Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.7.10) Gecko/20050717 Firefox/1.0.6') 
+1

連接在發送*頭之前被拒絕*。 –