Python запрашивает библиотеку не следует 302 правильно? - PullRequest
1 голос
/ 17 марта 2012

Я использую библиотеку запросов , чтобы попытаться опубликовать сообщение на форуме phpBB.

Мой код выглядит примерно так:

self.r = requests.session()
d = self.r.get('http://examplephpbbforum.com/community/posting.php?mode=reply&f=' + forumid + '&t=' + topicid)

sid = stringBetween('style.php?sid=', '&id=2', d.content)

lastclick = stringBetween('lastclick" value="', '" />', d.content)
creation_time = stringBetween('creation_time" value="', '" />', d.content)
form_token = stringBetween('form_token" value="', '" />', d.content)
topic_cur_post_id = stringBetween('topic_cur_post_id" value="', '" />', d.content)
payload = {'addbbcode20':'100', 'message':message, 'topic_cur_post_id':topic_cur_post_id, 'lastclick':lastclick, 'post':'Submit', 'attach_sig':'on', 'creation_time':creation_time, 'form_token':form_token}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1', 'Referer':'http://examplephpbbforum.com/community/posting.php?mode=reply&f=' + forumid + '&t=' + topicid, 'Content-Type':'application/x-www-form-urlencoded', 'Connection':'Keep-alive', 'Host':'examplephpbbforum.com', 'Accept-Language':'en-us,en;q=0.5', 'Accept-Encoding':'gzip, deflate', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'}

d = self.r.post('http://examplephpbbforum.com/community/posting.php?mode=reply&f=' + forumid + '&sid=' + sid + '&t=' + topicid, data=payload, headers=headers, allow_redirects=True)

Затем я проверяю, была ли тема успешно опубликована, выполняя поиск строки в ответе.

Поток трафика таков, что после первого поста происходит переадресация 302, после чего запрос следует на страницу, на которую он успешно отправлен.

Иногда это работает (возможно, 1 из 50 раз), но обычно это не работает. Ответ - это просто страница с первого запроса get. (Пост на странице ответа)

Он должен перенаправлять сообщения почти всегда, но по какой-то причине этого не происходит.

Если я прослушиваю трафик с помощью wireshark, кажется, что ответ обычно отправляется с URL-адресом для перенаправления, но, похоже, что-то идет не так.

Кто-нибудь знает, что может быть причиной этой ошибки, и как ее исправить?

1 Ответ

3 голосов
/ 07 апреля 2012

Я думаю, что ваша проблема может быть связана с тем, что запросы не используют правильный метод HTTP при обработке перенаправлений.Ошибка была исправлена ​​30-03-2012;см. проблему # 269 (исправить тип последующего метода перенаправления) для получения более подробной информации.

...