Проблема с неправильным URL-адресом Python2 urllib/urllib2

Я пишу скрипт Python2 для выполнения некоторых автоматических действий на веб-сайте. Я использую urllib/urllib2 для выполнения этой задачи. Он включает запросы GET и POST, настраиваемые заголовки и т. д.

Я наткнулся на проблему, которая, кажется, не упоминается в документации. Предположим, что у нас есть следующий допустимый URL-адрес: https://stackoverflow.com/index.php?abc=def&fgh=jkl и нам нужно выполнить там запрос POST.

Как выглядит мой код (пожалуйста, игнорируйте, если вы обнаружите какие-либо опечатки):

data = urllib.urlencode({ "data": "somedata", "moredata": "somemoredata" })
urllib2.urlopen(urllib2.Request("https://stackoverflow.com/index.php?abc=def&fgh=jkl", data))

Ошибки не отображаются, но, согласно веб-серверу, петиция поступает на "https://stackoverflow.com/index.php", а не "https://stackoverflow.com/index.php?abc=def&fgh=jkl". В чем проблема?

Я знаю, что мог бы использовать Запросы, но я хотел бы использовать urllib/ сначала urllib2.


person Bob Dem    schedule 04.08.2013    source источник
comment
Не будь героем, используй python-запросы. Нет разблокируемых достижений от игры на питоне в сложном режиме. :D   -  person synthesizerpatel    schedule 05.08.2013


Ответы (1)


Если я не ошибаюсь, вы должны передать данные запроса в словарь данных, который вы передали функции url open().

data = urllib.urlencode({'abc': 'def', 'fgh': 'jkl'})
urllib2.urlopen(urllib2.Request('http://stackoverflow.com/index.php'))

Кроме того, как вы сказали, используйте запросы, если вам абсолютно не нужен низкоуровневый доступ, предоставляемый urllib.

Надеюсь это поможет.

person Can Ibanoglu    schedule 04.08.2013
comment
В итоге я использовал запросы, так как не смог найти решение этой проблемы... все равно спасибо! - person Bob Dem; 05.08.2013
comment
этот ответ на самом деле ничего не делает с data - person Corey Goldberg; 19.12.2016