Подтвердить что ты не робот

Как я могу удалить URL-адрес?

Я хочу уметь сокращать или сокращать URL-адрес и возвращать его сокращенную форму. Как я могу сделать программу python для этого?

Дополнительная информация:

  • Случай 1: укороченный → без искажений
  • Случай 2: unshortened → unshortened

например. bit.ly/silly во входном массиве должно быть google.com в выходном массиве
например google.com во входном массиве должно быть google.com в выходном массиве

4b9b3361

Ответ 1

Отправьте запрос HTTP HEAD на URL-адрес и посмотрите код ответа. Если код равен 30 раз, просмотрите заголовок Location, чтобы получить непрозрачный URL. В противном случае, если код 20x, URL не перенаправляется; вы, вероятно, также захотите обработать коды ошибок (4xx и 5xx) в некотором роде. Например:

# This is for Py2k.  For Py3k, use http.client and urllib.parse instead, and
# use // instead of / for the division
import httplib
import urlparse

def unshorten_url(url):
    parsed = urlparse.urlparse(url)
    h = httplib.HTTPConnection(parsed.netloc)
    h.request('HEAD', parsed.path)
    response = h.getresponse()
    if response.status/100 == 3 and response.getheader('Location'):
        return response.getheader('Location')
    else:
        return url

Ответ 2

Использование запросов:

import requests

session = requests.Session()  # so connections are recycled
resp = session.head(url, allow_redirects=True)
print(resp.url)

Ответ 3

Unshorten.me имеет api, который позволяет отправлять запрос JSON или XML и получать полный URL-адрес.

Ответ 4

Откройте URL-адрес и посмотрите, что он разрешает:

>>> import urllib2
>>> a = urllib2.urlopen('http://bit.ly/cXEInp')
>>> print a.url
http://www.flickr.com/photos/[email protected]/346615997/sizes/l/
>>> a = urllib2.urlopen('http://google.com')
>>> print a.url
http://www.google.com/

Ответ 5

Чтобы отключить, вы можете использовать запросы. Это простое решение, которое работает для меня.

import requests
url = "http://foo.com"

site = requests.get(url)
print(site.url)

Ответ 7

Вот код src, который учитывает почти полезные угловые случаи:

  • установите пользовательский тайм-аут.
  • установить пользовательский агент.
  • проверьте, нужно ли нам использовать соединение http или https.
  • рекурсивно рекурсивно вводить URL-адрес ввода и предотвращать завершение цикла.

Код src находится на github @https://github.com/amirkrifa/UnShortenUrl

комментарии приветствуются...

import logging
logging.basicConfig(level=logging.DEBUG)

TIMEOUT = 10
class UnShortenUrl:
    def process(self, url, previous_url=None):
        logging.info('Init url: %s'%url)
        import urlparse
        import httplib
        try:
            parsed = urlparse.urlparse(url)
            if parsed.scheme == 'https':
                h = httplib.HTTPSConnection(parsed.netloc, timeout=TIMEOUT)
            else:
                h = httplib.HTTPConnection(parsed.netloc, timeout=TIMEOUT)
            resource = parsed.path
            if parsed.query != "": 
                resource += "?" + parsed.query
            try:
                h.request('HEAD', 
                          resource, 
                          headers={'User-Agent': 'curl/7.38.0'}
                                   }
                          )
                response = h.getresponse()
            except:
                import traceback
                traceback.print_exec()
                return url

            logging.info('Response status: %d'%response.status)
            if response.status/100 == 3 and response.getheader('Location'):
                red_url = response.getheader('Location')
                logging.info('Red, previous: %s, %s'%(red_url, previous_url))
                if red_url == previous_url:
                    return red_url
                return self.process(red_url, previous_url=url) 
            else:
                return url 
        except:
            import traceback
            traceback.print_exc()
            return None