1

リクエストライブラリを使用して、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リダイレクトが存在することです。

時々それは機能します(多分50回に1回)が、一般的には機能しません。応答は、最初のgetリクエストからのページにすぎません。(返信ページの投稿)

投稿されたメッセージにほぼ毎回リダイレクトされるはずですが、何らかの理由でリダイレクトされません。

Wiresharkでトラフィックをスニッフィングすると、応答は通常、リダイレクト先のURLで送信されるようですが、そこで問題が発生しているようです。

そもそもこれが失敗する原因とその修正方法を知っている人はいますか?

4

1 に答える 1

3

あなたの問題は、リダイレクトを処理するときにリクエストが適切な HTTP メソッドを使用していないことが原因である可能性があると思います。このバグは 2012 年 3 月 30 日に修正されました。詳細については、問題#269 (後続のリダイレクト リクエスト メソッド タイプの修正) を参照してください。

于 2012-04-07T19:44:14.383 に答える