Как открыть URL-адрес с помощью Python без использования браузера?

Я хочу открыть URL-адрес с кодом Python, но не хочу использовать модуль «веб-браузер». Я уже пробовал это, и это сработало (он открыл URL-адрес в моем браузере по умолчанию, чего я НЕ хочу). Итак, я попытался использовать urllib (urlopen) и механизировать. Оба они нормально работали с моей программой, но ни один из них не отправил мой запрос на веб-сайт!

Вот часть моего кода:

finalURL="http://www.locationary.com/access/proxy.jsp?ACTION_TOKEN=proxy_jsp$JspView$SaveAction&inPlaceID=" + str(newPID) + "&xxx_c_1_f_987=" + str(ZA[z])

print finalURL

print ""

br.open(finalURL)

page = urllib2.urlopen(finalURL).read()

Когда я захожу на сайт locationary.com, он не показывает, что были внесены какие-либо изменения! Однако когда я использовал «веб-браузер», он отображал изменения на веб-сайте после того, как я отправил свой URL-адрес. Как я могу сделать то же самое, что и веб-браузер, фактически не открывая браузер?

Я думаю, что веб-сайт хочет "ПОЛУЧИТЬ"


person jacob501    schedule 23.12.2011    source источник
comment
Разве нет '?' в proxy.jspACTION_TOKEN= нравится proxy.jsp?ACTION_TOKEN=   -  person Paulo Scardine    schedule 23.12.2011
comment
Знаете ли вы, нужен ли сервису запрос POST или GET?   -  person Wayne Werner    schedule 23.12.2011
comment
Не имеет прямого отношения к вашей проблеме, но вы можете отметить, что urllib.urlopen() устарел и удален в Python 3.0. Используйте urllib2.urlopen()   -  person Amadan    schedule 23.12.2011
comment
Это хороший пример для urllib2: voidspace.org.uk/ python/articles/urllib2.shtml#fetching-urls   -  person sgallen    schedule 23.12.2011
comment
Попробуйте следующее: напишите программу как с webbrowser, так и с urllib2, обновите веб-браузер одним набором данных, а затем немного измените данные с помощью запроса urllib2. Один запрос работает, а другой нет? Затем попробуйте поменять местами запросы — это позволит убедиться, что ваши запросы хороши.   -  person Wayne Werner    schedule 23.12.2011
comment
Возникает ли ошибка HTTPError? Можете ли вы привести пример URL-адреса без переменных, который работает с использованием модуля «веб-браузер»? Если я попытаюсь создать URL-адрес на основе вашей отправки (locationary.com/access/) и поместите его в свой настоящий браузер. Я получаю: {manifest:{errorTimeout:0,succeed:true,errorCode:0,serverVersion:1.0,type:locaaccess} ,saveResult:{сообщение:Yellowpages.com не заполнено. Введите значение или нажмите \cancel\.,placeOpenedState:0,isSucess:false}}   -  person sgallen    schedule 23.12.2011
comment
Мне также интересно, если вы очистите файлы cookie в своем браузере, а затем попытаетесь использовать свой код, работает ли версия модуля веб-браузера?   -  person sgallen    schedule 23.12.2011


Ответы (2)


Я не уверен, над какой ОС вы работаете, но если вы используете что-то вроде http://tuffcode.com/ (mac) или fiddler ( pc) или wireshark, вы сможете наблюдать за трафиком и видеть, что происходит. Возможно, веб-сайт выполняет перенаправление (которое отслеживает ваш браузер) или какие-то другие последующие действия.

Запустите HTTP-сниффер, сделайте запрос с помощью веб-браузера и наблюдайте за трафиком. Как только вы это сделаете, попробуйте это со скриптом python и посмотрите, выполняется ли запрос, и в чем разница в HTTP-трафике. Это должно помочь определить, где разрыв.

person Kirsten Jones    schedule 23.12.2011

HTTP GET не требует какого-либо специального кода или действия на стороне клиента: это просто базовый URL-адрес (http://server/) + путь + необязательный запрос.

Если URL-адрес правильный, приведенный выше код должен работать. Некоторые указатели, что вы можете попробовать дальше:

  1. URL-адрес действительно правильный? Используйте Firebug или аналогичный инструмент для наблюдения за сетевым трафиком, который дает вам полный URL-адрес плюс любые поля заголовка из HTTP-запроса.

  2. Возможно, сайт требует, чтобы вы сначала вошли в систему. Если это так, убедитесь, что вы правильно настроили файлы cookie.

  3. Некоторым сайтам требуется правильное поле «реферер» (чтобы защитить себя от внешних ссылок). Добавьте заголовок реферера, который ваш браузер использовал для запроса.

  4. Файл журнала сервера является отличным источником информации для решения таких проблем, когда у вас есть к нему доступ.

person Aaron Digulla    schedule 23.12.2011
comment
Извини. В моем коде есть вопросительный знак, но он каким-то образом исчез, когда я поставил его здесь. Кажется, я случайно нажал Backspace. - person jacob501; 23.12.2011
comment
Это не совсем ответ на мой вопрос. - person jacob501; 23.12.2011
comment
Это не отвечает на мой вопрос. Пожалуйста, удалите его. - person jacob501; 23.12.2011
comment
ИМХО все же больше комментарий, чем ответ. - person Paulo Scardine; 23.12.2011