基本的に私は次のフォームのPOSTリクエストを送信したいと思います。ページを読まれる私は基本的にやりたいPythonですでに開いているURLにPOSTリクエストを送信する
<form method="post" action="">
449 * 803 - 433 * 406 = <input size=6 type="text" name="answer" />
<input type="submit" name="submitbtn" value="Submit" />
</form>
、形で式を見つける、答えを計算し、POSTリクエストを送信するためのパラメータとしての答えを入力しますが、のための新しいURLを開くことなく、ページが開かれるたびに新しい方程式としてページが現れ、以前に得られた結果は時代遅れになる。最後に、POSTリクエストを送信した結果として表示されるページを取得します。私は、新しいURLインスタンスを開かずにPOSTリクエストを送信しなければならない部分に立ち往生しています。また、POSTリクエスト後にページを再度読み込む方法についても助けていただきたいと思います。 (read()
で十分ですか?)
私は現在、このような感じです。
私は、私はあなたが「新しいURLのインスタンスを開くことなく」によって何を意味するのか理解していない...あなたが取って試してみました少し戸惑い、POST要求は常に新しい別々のリクエストになりますよimport urllib, urllib2
link = "http://www.websitetoaccess.com"
f = urllib2.urlopen(link)
line = f.readline().strip()
equation = ''
result = ''
file1 = open ('firstPage.html' , 'w')
file2 = open ('FinalPage.html', 'w')
for line in f:
if 'name="answer"' in line:
result = getResult(line)
file1.write(line)
file1.close()
raw_params = {'answer': str(result), 'submit': 'Submit'}
params = urllib.urlencode(raw_params)
request = urllib2.Request(link, params)
page = urllib2.urlopen(request)
file2.write(page.read())
file2.close()
ウェブブラウザで手動で行うことに問題があるのは、タイムアウトが発生したときに認証が正しく行われるように、フォームがマシン主導の応答を必要とし、人間が正しい答えを出すことができないため、十分に速いです。 – ASCH
あなたが提案したようにリクエストを試みましたが、同じ問題が発生しました。私はあなたが上記で提供したコードのres2と信じています。それは新たな別のリクエストを開始します(したがってres1の質問から私の以前に保存された回答を間違えてしまいます) – ASCH
これはヘッダーの問題かクッキー問題? POST要求は以前のGET要求とは別の要求であり、1つの要求に結合することはできません。ヘッダーを確認したり、セッションを試したりしてください(リクエストを使用する場合は簡単に追加できます、http://docs.python-requests.org/ja/master/user/advanced/)。 – Loknar