HTTP-запрос на постоянное перемещение с использованием HttpLib

Область:

В настоящее время я пытаюсь написать веб-парсер для этой конкретной страницы. У меня есть довольно сильный опыт веб-сканирования с использованием C#, но этот httplib отбивает меня.

Проблема:

При попытке сделать запрос Http Get для указанной выше страницы я получаю сообщение Moved Permanently, которое указывает на тот же самый URL. Я могу сделать запрос, используя библиотеку requests, но я хочу заставить его работать с помощью httplib, чтобы понять, что я делаю неправильно.

Пример кода:

Я совершенно новичок в Python, поэтому любой неправильный language guideline или синтаксис является ошибкой C#.

import httplib

# Wrapper for a "HTTP GET" Request
class HttpClient(object):
    def HttpGet(self, url, host):
        connection = httplib.HTTPConnection(host)
        connection.request('GET', url)
        return connection.getresponse().read()

 
# Using "HttpClient" class
httpclient = httpClient()

# This is the full URL I need to make a get request for : https://420101.com/strain-database
 
httpResponseText = httpclient.HttpGet('www.420101.com','/strain-database')
print httpResponseText

Я действительно хочу, чтобы это работало, используя библиотеку httplib вместо requests или любой другой причудливой, потому что я чувствую, что здесь не хватает чего-то очень маленького.


person Marcello Grechi Lins    schedule 11.05.2015    source источник
comment
Лучше включить код в вопрос. Тем более, что он только короткий.   -  person Paul Rooney    schedule 12.05.2015
comment
@PaulRooney Готово. Спасибо за вклад   -  person Marcello Grechi Lins    schedule 12.05.2015
comment
Нет ли опечатки? HttpClient или httpClient?   -  person Paul Rooney    schedule 12.05.2015
comment
Вероятно, библиотека более высокого уровня автоматически следует за перенаправлением. Вероятно, вам придется сделать это вручную в httplib.   -  person Paul Rooney    schedule 12.05.2015
comment
@Malvio, если это для образовательных целей, то использовать httplib просто отлично.   -  person Paul Rooney    schedule 12.05.2015
comment
Редирект происходит с www.420101.com на 420101.com (без www). Если вы можете оставить это в своем первоначальном запросе, у вас нет проблем. Это приемлемый результат?   -  person Paul Rooney    schedule 12.05.2015
comment
@PaulRooney - в образовательных целях? Насколько я понимаю, httplib не обрабатывает перенаправления автоматически, а requests делает.   -  person Malvolio    schedule 12.05.2015
comment
@Malvolio Точно, так что, если Марчелло хотел узнать о перенаправлениях, он мог бы использовать httplib и «запачкать руки», но когда пришло время что-то сделать для производства, это requests полностью.   -  person Paul Rooney    schedule 12.05.2015
comment
Также обратите внимание, что вы используете параметры HttpClient в обратном порядке. Вы передаете (host, url), но функция принимает (url, host). Как вы уже обнаружили, это https и ему нужен экземпляр httplib.HTTPSConnection.   -  person Paul Rooney    schedule 12.05.2015


Ответы (1)


Проблема в том, что в моем организме было слишком мало или слишком много кофеина.

Чтобы получить https, мне понадобился класс HTTPSConnection.

Кроме того, в адресе, который я хотел ПОЛУЧИТЬ, нет «www». Таким образом, он не должен быть включен в host.

Оба неправильных адреса перенаправляют меня на правильный с кодом ошибки 301. Если бы я использовал запросы или более полнофункциональный модуль, он бы автоматически следовал за перенаправлением.

Моя проверка:

c = httplib.HTTPSConnection('420101.com')
c.request("GET", "/strain-database")
r = c.getresponse()
print r.status, r.reason

200 OK
person Marcello Grechi Lins    schedule 11.05.2015
comment
Похоже, вы скопировали пример из того же места, что и я :) - person Paul Rooney; 12.05.2015